C#中的数组切片
C#不像Perl那样可以直接使用@bar = @foo[0..40];
的语法来切片数组。但是,有一些替代方法可以实现类似的功能。
ArraySegment
对于一个轻量级的选项,它避免了复制原始数组,可以考虑使用ArraySegment<T>
。它表示数组的连续部分,而不会复制底层元素:
<code class="language-csharp">byte[] foo = new byte[4096]; var segment = new ArraySegment<byte>(foo, 0, 41);</code>
segment
现在包含原始foo
数组的前41个字节。您可以通过Array
和Offset
属性访问其内容,或者直接在LINQ表达式中使用它。
LINQ Skip和Take
如果您更喜欢LINQ,您可以使用Skip
和Take
方法来实现切片:
<code class="language-csharp">IEnumerable<byte> slice = foo.Skip(0).Take(41);</code>
slice
将把foo
数组的前41个字节作为一个IEnumerable<byte>
序列返回。
自定义数组切片函数
如果ArraySegment
和LINQ都不能满足您的需求,您可以使用索引范围创建一个自定义数组切片函数:
<code class="language-csharp">byte[] Slice(byte[] array, int startIndex, int length) { byte[] slice = new byte[length]; Array.Copy(array, startIndex, slice, 0, length); return slice; } byte[] slice = Slice(foo, 0, 41);</code>
以上是如何在 C# 中对数组进行切片?的详细内容。更多信息请关注PHP中文网其他相关文章!