Использование массивов в Visual C #? - PullRequest
1 голос
/ 31 декабря 2011

У меня есть функция, которая принимает массив в качестве параметра.Затем функция заполняет массив информацией неизвестной длины.Итак, как мне создать массив для хранения сообщения неизвестной длины?Потому что я не могу указать размер массива, так как я не знаю размер сообщения, которое он будет хранить.

Будет ли это допустимым?

byte [] array;
function (array);

И затемразмер массива будет определяться размером сообщения, которое он заполняет?Если это невозможно, как бы я это сделал?

Мне нужно, чтобы массив был точным размером сообщения, которым он заполнен, поэтому я не могу просто указать массив, который будет иметь произвольный размердостаточно большой, чтобы вместить сообщение.


Дополнительно от комментария:

public int ReceiveFrom( byte[] buffer, int offset, int size, 
       SocketFlags socketFlags, ref EndPoint remoteEP ) 

Ответы [ 5 ]

3 голосов
/ 31 декабря 2011

Вы можете использовать список, а затем, когда ваше сообщение заполнено, позвонить ToArray

Редактировать

Пример:

List<byte> message = new List<byte>();
message.Add(/*your byte*/);
//More Adds
function(message.ToArray());
2 голосов
/ 31 декабря 2011

Об использовании

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);
0 голосов
/ 31 декабря 2011

Трудно сказать, не зная точных деталей, но вы можете позволить функции создать массив после того, как она узнает длину информации.

Дополнительно, с Linq (используя ToArray и ToList ) вы можете разыгрывать массивы и списки из и в массивы и списки, но, опять же, трудно понять, не зная намерений.

0 голосов
/ 31 декабря 2011

Вам нужно что-то сделать с массивом, прежде чем передать его в функцию, которая заполняет его? Если вы этого не сделаете, почему бы вам просто не вернуть массив из функции вместо того, чтобы передать его один:

byte[] retArray = function();

где функция:

byte[] function()
{
}

Затем вы можете узнать длину массива, проверив:

if( retArray != null )
{
  Console.WriteLine( retArray.Count );
}
0 голосов
/ 31 декабря 2011

Вместо этого вы можете использовать Список .Хотя это и возможно, вам не нужно устанавливать заранее определенную длину, и список будет расширяться по мере добавления новых объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...