在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 ) 

在Visual c#中使用数组

您可以使用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),您可以从数组和列表转换到数组和列表,但是,如果不知道意图,很难分辨。