在Visual c#中使用数组
本文关键字:数组 Visual | 更新日期: 2023-09-27 18:19:18
我有一个以数组为参数的函数。然后函数用未知长度的信息填充数组。那么如何创建一个数组来存储未知长度的消息呢?因为我不能指定数组的大小因为我不知道它要存储的消息的大小
这是有效的吗?
byte [] array;
function (array);
然后数组的大小将由它所填充的消息的大小决定?如果这都不可能,我该怎么做?
我需要数组的大小与它所填充的消息的大小相同,所以我不能只是指定数组的大小随机到足以容纳消息
附加,来自注释:
public int ReceiveFrom( byte[] buffer, int offset, int size,
SocketFlags socketFlags, ref EndPoint remoteEP )
您可以使用List,然后一旦您的消息填充调用ToArray
编辑的例子:
List<byte> message = new List<byte>();
message.Add(/*your byte*/);
//More Adds
function(message.ToArray());
关于使用
public int ReceiveFrom( byte[] buffer, int offset, int size,
SocketFlags socketFlags, ref EndPoint remoteEP )
应该在循环中使用。您一次接收全部消息(流)的一部分。由你来决定你需要哪一部分。可选地向下移动其余部分,并在下一个调用中指定一个offset
。
byte[] buffer = new byte[1024];
ínt n;
do
{
n = ReceiveFrom(buffer, 0, buffer.Lenght, ...);
if (n > 0)
// process n bytes in buffer
} while (n > 0);
您可以使用List代替。虽然可能,但您不需要设置预先确定的长度,并且List将随着添加更多对象而扩展。
在将数组传递给填充它的函数之前,您需要对数组做些什么吗?如果没有,为什么不直接从函数返回数组而不是传递数组呢?
byte[] retArray = function();
byte[] function()
{
}
你可以检查数组的长度:
if( retArray != null )
{
Console.WriteLine( retArray.Count );
}
在不知道确切细节的情况下很难判断,但是您可以让函数在知道信息的长度后创建数组。
此外,使用Linq(使用ToArray和ToList),您可以从数组和列表转换到数组和列表,但是,如果不知道意图,很难分辨。