如果我有一个字节数组创建byte [] binBuffer = new byte [256]并填充100个字节的数组,如果我想只传递这些100字节到其他方法,是否有可能做到这一点,而不需要创建一个100字节的新字节数组,从旧数组复制到新数组,然后传递新数组?有什么我可以通过前100个字节。我的应用程序特别适用于将数组传递给存储过程。使用字节数组的一部分
17
A
回答
2
如果你可以使用LINQ:
SomeMethod(binBuffer.Take(100));
1
,如果你使用的是.NET 3.5,你可以使用采取()扩展方法并执行以下操作:
class Program
{
static void Main(string[] args)
{
byte[] b = new byte[1000];
dowork(b.Take(10).ToArray());
}
public static void dowork(byte[] b)
{
// do some work
}
}
1
当一个数组传递对一个方法来说,只有对它的引用才被实际传递,因为数组实际上是引用类型。你基本上有一个指向数组的指针,然后方括号中的偏移量只是告诉你离开始有多少“槽”。因此,唯一真正的做法是将两个参数传递给你的方法。一个是实际的阵列,第二个是最大数量,直到你需要去的地方,在你的情况下它会是100.在那个方法中,你只能遍历数组,直到达到最大数量。
18
与缓冲器工作时,一个很常见的模式是:
Foo(byte[] data, int offset, int count) {...}
模式。但是,不能将其与SqlCommand
/参数一起使用,因为分配给参数时会占用整个缓冲区。你将需要一个新的阵列:
byte[] second = new byte[100];
Buffer.BlockCopy(first, firstOffset, second, 0, 100);
param.Value = second;
2
简短的回答是:没有。你所做的任何事情(除了将数组本身作为参数传递外)都将创建一个新数组并将其中的前100个字节复制。
但是,由于您不是按值传递数组,而是在传递它的引用,所以如果数组是256字节或100,为什么对您有影响?你不会浪费更多的记忆。不过,您可能需要告诉该方法使用多少数组,因为Length方法将返回完整长度。
编辑:我刚刚意识到你想要传递数组到存储过程。这将复制整个数组。您只需复制您想要传递的元素。
相关问题
- 1. 使用部分缓冲区将多字节Unicode字节数组转换为NSString
- 2. 将String字节数组的一部分追加到StringBuilder中
- 3. 如何将Python元组(字节数组)的一部分转换为整数
- 4. 使用字节数组
- 5. C#:使用字节数组
- 6. char数组Vs字节数组使用哪一个?
- 7. 转换TIFF字节数组PDF字节数组使用iTextSharp的用C#
- 8. 使用C#字节读取字节数组我使用C#
- 9. 将文件的一部分复制到Java中的字节数组中
- 10. 从GetBuffer获得分配的字节数组的唯一字节是否安全?
- 11. 设置字符串的一部分等于数组的一部分
- 12. Arduino:一次检查一个字节的字节数组
- 13. 在分隔符处分割一个字节数组
- 14. 按特定字节拆分字节数组(字符)
- 15. 查找字符串数组中的字符串的一部分
- 16. 从ByteArrayInputStream获取内部字节数组
- 17. 使用字符串的整数部分访问字符串标签的节点
- 18. 部分字节访问
- 19. 比较字符串数组中的一部分字符串
- 20. 如何将一部分字节数组转换为特定类型?
- 21. 将字节数组转换回字节数组返回字节数组
- 22. 如何将一个字节数组复制到另一个字节数组中?
- 23. 如何分割字节数组
- 24. 将长串拆分为字节数组
- 25. 提取从字节数组积分型
- 26. 使用PDF.JS和AngularJS从字节数组
- 27. 使用long数据类型创建一个字节数组?
- 28. 解码字节数组中的一个字节的FOUR_BITS(C)
- 29. PostgreSQL字符串的一部分是在一个数组中
- 30. 从字节数组中使用一个没有反射的类?
我懒得检查 - 但这真的不只是将数组复制到一个大小为100的新数组? – 2009-02-26 04:28:08
同意安德鲁。这应该重新检查。 – 2009-02-26 04:30:40