Hello,
This is my first question so I would like to say hello to everyone.
My friend was programming in Delphi. Now he is learning C# and asked me, if I know C# eqivalent of Delphi's FillChar.
Could you please help me to help him?
Kind regards
-
If I understand FillChar correctly, it sets all elements of an array to the same value, yes?
In which case, unless the value is 0, you probably have to loop:
for(int i = 0 ; i < arr.Length ; i++) { arr[i] = value; }
For setting the values to the type's 0, there is
Array.Clear
Obviously, with the loop answer you can stick this code in a utility method if you need... for example, as an extension method:
public static void FillChar<T>(this T[] arr, T value) {...}
Then you can use:
int[] data = {1,2,3,4,5}; //... data.FillChar(7);
If you absolutely must have block operations, then
Buffer.BlockCopy
can be used to blit data between array locatiosn - for example, you could write the first chunk, then blit it a few times to fill the bulk of the array.Gamecat : FillChar fills a structure (any one) with a given length with the same value. It is not the most descriptive name in the Delphi library but is has been around for a long time.Marc Gravell : @Gamecat - to overwrite *any* structure, you would probably need to use unsafe code and simply write over it... the question would be: why? -
Try this in C#:
String text = "hello"; text.PadRight(10, 'h').ToCharArray();
-
I'm assuming you want to fill a byte array with zeros (as that's what FillChar is mostly used for in Delphi).
.NET is guaranteed to initialize all the values in a byte array to zero on creation, so generally FillChar in .NET isn't necessary.
So saying:
byte[] buffer = new byte[1024];
will create a buffer of 1024 zero bytes.
If you need to zero the bytes after the buffer has been used, you could consider just discarding your byte array and declaring a new one (that's if you don't mind having the GC work a bit harder cleaning up after you).
0 comments:
Post a Comment