通过引用传递索引的干净替代方案

Clean alternatives to passing index by reference

在我的代码中,我正在解析一个字节数组。要按顺序解析我当前在索引周围传递的字节,如下所示:

headerData = ParseHeader(bytes, ref index)
middleData = ParseMiddle(bytes, ref index)
tailData   = ParseTail  (bytes, ref index)

如果不硬编码增加 header 的数量,有没有办法实现类似的功能而不必通过引用传递索引?这是使用 ref 关键字是最佳解决方案的罕见情况之一吗?

正如 SLaks 所说,一个可能的解决方案是使用流。

要从当前字节数组创建流,您可以执行以下操作:

MemoryStream stream = new MemoryStream(bytes);

要读取流的当前字节,您可以使用 ReadByte 方法,如下所示:

byte b = stream.ReadByte();

流将跟踪数组中的当前索引,因此您的新代码如下所示:

MemoryStream stream = new MemoryStream(bytes);
headerData = ParseHeader(stream)
middleData = ParseMiddle(stream)
tailData   = ParseTail  (stream)

查看 documentation 以查看可用于 MemoryStream 的其他方法。