Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问数组子集的方法? 我试图弄清楚C语言中是否有一种方法在C++中是相当容易的。具体地说,如果我有一个数据数组,我可以创建一个指向该数据的指针,以便更方便地访问一个子部分_C# - Fatal编程技术网

C# 访问数组子集的方法? 我试图弄清楚C语言中是否有一种方法在C++中是相当容易的。具体地说,如果我有一个数据数组,我可以创建一个指向该数据的指针,以便更方便地访问一个子部分

C# 访问数组子集的方法? 我试图弄清楚C语言中是否有一种方法在C++中是相当容易的。具体地说,如果我有一个数据数组,我可以创建一个指向该数据的指针,以便更方便地访问一个子部分,c#,C#,例如,如果我有: unsigned char buffer[1000]; 我确定数组中102到110处有一个字符串,我需要对它进行大量操作,我可以这样做: unsigned char *strPtr = &buffer[102]; char firstChar = strPtr[0]; 这使我不必在后续操作中向每个数组索引添加“102” 虽然我认识到这样做可能会出现不安全的情况,但我想知道C#中是否有一个道德等价物,可以让我创建一个对现有数组子集的新引用 比如: byte [8] n

例如,如果我有:

unsigned char buffer[1000];
我确定数组中102到110处有一个字符串,我需要对它进行大量操作,我可以这样做:

unsigned char *strPtr = &buffer[102];
char firstChar = strPtr[0];
这使我不必在后续操作中向每个数组索引添加“102”

虽然我认识到这样做可能会出现不安全的情况,但我想知道C#中是否有一个道德等价物,可以让我创建一个对现有数组子集的新引用

比如:

byte [8] newArray = &buffer[102];
该示例实际上不起作用,或者我不会发布此示例,但我认为它了解了我想要完成的任务。

有一个类可以用作包装器来访问数组的段。只要提供数组、偏移量和段的长度,就可以像使用实际数组一样使用它。您将获得使用数组的边界检查和其他细节

var buffer = new byte[1000];
var newArray = new ArraySegment<byte>(buffer, 102, 8) as IList<byte> // we have an "array" of byte[8]
var firstChar = newArray[0];
var buffer=新字节[1000];
var newArray=newarraysegment(buffer,102,8)作为IList//我们有一个字节为[8]的“数组”
var firstChar=newArray[0];


然而,有一种方法可以引入阵列切片。与ArraySegment一样,切片允许您将视图创建到阵列中(无需制作副本),并可用于代替实际阵列。希望它能成为(不久的)未来的C#版本。

您希望它是副本还是直接修改原始数组?我不会写回信,只是从中读取。我希望避免复制数据。事实上,我不会问复制数据是否不是一个绊脚石。如果您关心的只是从数据中读取,为什么不保留
int offset=102;缓冲区[偏移量+i]…
?这意味着您不需要不安全的代码来完成任务。
ArraySegment
无疑是一种更干净的方法。如果您确实因为某种原因试图避免偏移量计算,那么您必须使用不安全的代码。Jason,这正是我试图避免的情况。ArraySegment是否正在通过使用偏移量获取/更改原始错误的预期元素来做OP试图避免的事情?我认为这种结构是通过添加索引+内部的
\u offset
并返回结果元素来工作的。@JasonW但OP中描述的技术恰恰是,向数组中添加“offset”的快捷方式。似乎他试图避免每次访问元素时添加offset。我知道_偏移量存储在struct中,但我不确定的是,如果每次访问元素时都使用_偏移量(这就是我认为他试图阻止的原因),这看起来很有希望。我会查出来的。整个答案是:
byte[]b=(新的ArraySegment(buf,102,8)作为IList)