2009-11-27 16 views
7

Mam tablicy ints. Zaczynają się od 0, a następnie zostają wypełnione pewnymi wartościami. Następnie chcę ustawić wszystkie wartości z powrotem na 0, tak, żebym mógł użyć go ponownie, lub po prostu usunąć całą tablicę, tak, że mogę ją redeclare i zacząć od tablicy wszystkich 0.Jak wyczyścić tablicę w Visual C#

+0

możliwym duplikatu http://stackoverflow.com/questions/1407715/how -to-szybko-zero-out-an-array –

Odpowiedz

28

Można zadzwonić Array.Clear:

int[] x = new int[10]; 
for (int i = 0; i < 10; i++) 
{ 
    x[i] = 5; 
} 
Array.Clear(x, 0, x.Length); 

Alternatywnie, w zależności od sytuacji, może się okazać, że jaśniejsze po prostu stworzyć nową tablicę zamiast. W szczególności nie musisz się martwić, czy jakiś inny kod nadal ma odniesienie do tablicy i oczekuje, że stare wartości będą tam obecne.

Nie pamiętam, żebym kiedykolwiek dzwonił pod Array.Clear w moim własnym kodzie - to po prostu nie jest coś, czego potrzebowałem.

(Oczywiście, jeśli masz zamiar wymienić wszystkie wartości tak, można to zrobić bez uprzedniego wyczyszczenie tablicy.)

+2

Dowolna tablica implementuje także *** nietypowy interfejs *** 'IList', który ma metodę' Wyczyść'. Mówiąc '((IList) x) .Clear();' również "czyści" instancję tablicy, chociaż to nie jest dobrze [udokumentowane] (http://msdn.microsoft.com/en-us/library/bb340970.aspx). Jeśli tablica jest rzeczywiście jednowymiarowa i zindeksowana zerowo, to także "magicznie" implementuje ogólny interfejs 'IList <>, który ma * inną * metodę zwaną również" Wyczyść ". Jeśli powiesz '((IList ) x) .Clear();' otrzymasz wyjątek czasu działania! Jest to subtelność, że te dwie jawne implementacje interfejsu w 'Tablicy' zachowują się inaczej. –

+0

Dziękuję za komentarz na temat kodu mającego odwołanie do tablicy! Robiąc s1 = s2; i Array.Clear (s2, 0, s2.Length), zajęło mi trochę czasu zanim uświadomiłem sobie, co zrobiłem. Dzięki! – Gyfis