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



Мой друг занимался программированием на Delphi. Теперь он изучает C# и спросил меня, знаю ли я C # - эквивалент Delphi's FillChar.



Не могли бы вы помочь мне помочь ему?
618   3  

3 ответов:

Если я правильно понимаю 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 можно использовать для blit данных между массивами locatiosn - например, вы можете написать первый кусок, а затем blit его несколько раз, чтобы заполнить основную часть массива.

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

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

Итак, говоря:

byte[] buffer = new byte[1024];

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

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

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

String text = "hello";
text.PadRight(10, 'h').ToCharArray();

Comments

    Ничего не найдено.