c# присваивают 1 размерный массив 2 размерным синтаксисам массива

От.NET 4.5 на, существует Stream.CopyToAsync метод

input.CopyToAsync(output);

, Это возвратится Task , который может быть продолжен, когда завершено, как так:

await input.CopyToAsync(output)

// Code from here on will be run in a continuation.

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

SynchronizationContext , который был получен при вызове await , определит то, что распараллеливает продолжение, будет выполняться на.

Кроме того, этот вызов (и это - подлежащая изменению деталь реализации) все еще упорядочивает чтения и записи (он просто не тратит впустую потоки, блокирующиеся на завершении ввода-вывода).

От.NET 4.0 на, существует, Stream.CopyTo метод

input.CopyTo(output);

Для.NET 3.5 и прежде

нет ничего испеченного в платформу для помощи с этим; необходимо скопировать содержание вручную, как так:

public static void CopyStream(Stream input, Stream output)
{
    byte[] buffer = new byte[32768];
    int read;
    while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write (buffer, 0, read);
    }
}

Примечание 1: Этот метод позволит Вам сообщать относительно прогресса (x чтение байтов до сих пор...)
Примечание 2: Почему использование фиксированный размер буфера а не input.Length? Поскольку та Длина не может быть доступной! От эти документы :

, Если класс, полученный из Потока, не поддерживает поиск, вызовы к Длине, SetLength, Положение, и Искать бросает NotSupportedException.

13
задан Paul Sonier 8 July 2009 в 16:52
поделиться

3 ответа

Нет, если вы используете двумерный массив, это невозможно. Вы должны скопировать каждый элемент.

Если вы используете массив с зазубринами, он отлично работает:

// create array of arrays
object[][] tableOfObject = new object[10][];
// create arrays to put in the array of arrays
for (int i = 0; i < 10; i++) tableOfObject[i] = new object[10];

// get row as array
object[] rowOfObject = GetRow();
// put array in array of arrays
tableOfObjects[0] = rowOfObjects;

Если вы получаете все данные в виде строк, вам, конечно, не нужен цикл, который помещает массивы в массив массивов, так как вы все равно просто замените их.

8
ответ дан 1 December 2019 в 23:32
поделиться

Итак, что-то вроде:

    public static object[] GetRow()
    {
        object[,] test = new object[10,10];
        int a = 0;
        object[] row = new object[10];
        for(a = 0; a <= 10; a++)
        {
            row[a] = test[0, a];
        }
        return row;
    }
-1
ответ дан 1 December 2019 в 23:32
поделиться

if I have gigabyte size arrays, I would do it in C++/CLI playing with pointers and doing just memcpy instead of having gazillion slow boundary-checked array indexing operations.

1
ответ дан 1 December 2019 в 23:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: