我最近遇到了一些 3rd 方 C# 代码,它执行以下操作:
public int RecvByteDataFromPrinter(ref byte[] byteData)
{
byte[] recvdata = new byte[1024];
///...fills recvdata array...
byteData = recvdata;
return SUCCESS;
}
在这种情况下,“
byteData = recvdata
”这一行实际上做了什么?看来目标是让 byteData 包含 recvdata 数组的内容。但是,我的印象是您需要执行
Array.Copy(...)
操作才能做到这一点。这实际上是在修改 byteData 引用以指向新分配的数组吗?如果是这样,该数组是否保证会保留下来?
最佳答案
是的,因为 ref - 它确实修改了传递的引用。
停在附近?你的意思是——没有被摧毁?是的,它不会因为新的引用而被 GC 处理。如果没有更多引用,旧数组(已传递)可能会在此分配之后被 GC 处理...
Array.Copy 实际上会复制元素,那么就不需要“ref”了,但是这样会比较费时
关于c# - 通过引用传递的数组的修改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/303109/