Что является эквивалентом Delphi FillChar в C #? - PullRequest
3 голосов
/ 26 ноября 2008

Что такое эквивалент C # Delphi's FillChar?

Ответы [ 3 ]

6 голосов
/ 26 ноября 2008

Я предполагаю, что вы хотите заполнить байтовый массив нулями (поскольку именно для этого FillChar чаще всего используется в Delphi).

.NET гарантированно инициализирует все значения в байтовом массиве до нуля при создании, поэтому обычно FillChar в .NET не требуется.

Так сказать:

byte[] buffer = new byte[1024];

создаст буфер из 1024 нулевых байтов.

Если вам нужно обнулить байты после того, как буфер был использован, вы можете просто отбросить свой байтовый массив и объявить новый (это если вы не возражаете против того, чтобы сборщик мусора работал немного сложнее после очистки). .

3 голосов
/ 26 ноября 2008

Если я правильно понимаю FillChar, он присваивает всем элементам массива одинаковое значение, да?

В этом случае, если значение не равно 0, вы, вероятно, должны выполнить цикл:

for(int i = 0 ; i < arr.Length ; i++) {
    arr[i] = value;
}

Для установки значений для типа 0 есть Array.Clear

Очевидно, что с ответом цикла вы можете вставить этот код в служебный метод, если вам нужно ... например, как метод расширения:

public static void FillChar<T>(this T[] arr, T value) {...}

Тогда вы можете использовать:

int[] data = {1,2,3,4,5};
//...
data.FillChar(7);

Если вы абсолютно должны иметь блочные операции, тогда Buffer.BlockCopy можно использовать для переноса данных между массивами locatiosn - например, вы можете записать первый блок, а затем несколько раз скопировать его, чтобы заполнить основная часть массива.

1 голос
/ 26 ноября 2008

Попробуйте это в C #:

String text = "hello";
text.PadRight(10, 'h').ToCharArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...