我最近遇到了一些 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/

10-13 01:54