【发布时间】:2018-12-24 10:35:21
【问题描述】:
为什么 NetworkStream.Read() 可以写入 byte[]?
byte[] data = new byte[16];
NetworkStream ns = new NetworkStream(socket);
ns.Read(data, 0, data.Length);
//data != new byte[16]
我认为您需要一个 out/ref 关键字来写入变量。像这样:
ns.Read(out data, 0, data.Length);
如果我尝试重新创建该方法它不起作用:
public static void testread(byte[] buffer, int size)
{
byte[] data = new byte[size];
for (int i = 0; i < data.Length; i++)
{
data[i] = 1;
}
buffer = data;
}
byte[] data = new byte[16];
testread(data, data.Length);
//data == new byte[16]
但如果我在 testread() 中添加“out”关键字确实有效:
public static void testread(out byte[] buffer, int size)
{
byte[] data = new byte[size];
for (int i = 0; i < data.Length; i++)
{
data[i] = 1;
}
buffer = data;
}
byte[] data = new byte[16];
testread(data, data.Length);
//data != new byte[16]
这证明您不能在没有“out”/“ref”关键字的情况下写入变量。但是 NetworkStream 如何在没有“out”/“ref”关键字的情况下写入 byte[] 呢? 吓人..
【问题讨论】:
标签: c# sockets network-programming ref out