2008-11-26 2 views

Répondre

3

Si je comprends correctement FillChar, il définit tous les éléments d'un tableau à la même valeur, oui?

Dans ce cas, à moins que la valeur est 0, vous avez probablement boucle:

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

Pour le réglage des valeurs à 0 de type, il y a Array.Clear

De toute évidence, la réponse de la boucle vous peut coller ce code dans une méthode utilitaire si vous avez besoin ... par exemple, en tant que méthode d'extension:

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

Ensuite, vous pouvez utiliser:

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

Si vous absolument doit avoir des opérations de bloc, puis Buffer.BlockCopy peut être utilisé pour blit données entre tableau locatiosn - par exemple, vous pouvez écrire le premier morceau, blit puis quelques fois pour remplir la majeure partie de la tableau.

+0

FillChar remplit une structure (une seule) d'une longueur donnée avec la même valeur. Ce n'est pas le nom le plus descriptif de la bibliothèque Delphi, mais il existe depuis longtemps. –

+0

@Gamecat - pour écraser une structure * any *, vous auriez probablement besoin d'utiliser du code non sécurisé et simplement écrire dessus ... la question serait: pourquoi? –

1

Essayez ceci dans C#:

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

Je suppose que vous voulez remplir un tableau d'octets avec des zéros (comme c'est ce que FillChar est surtout utilisé dans Delphi).

.NET est garanti pour initialiser toutes les valeurs dans un tableau d'octets à zéro à la création, donc généralement FillChar dans .NET n'est pas nécessaire.

le dire:

byte[] buffer = new byte[1024]; 

va créer un tampon de 1024 octets zéro.

Si vous avez besoin de zéro les octets après que le tampon a été utilisé, vous pouvez simplement jeter votre tableau d'octets et en déclarer un nouveau (si cela ne vous dérange pas que le GC fonctionne un peu plus dur après).