2012-05-16 22 views
9

Zauważyłem, że tablice mają metodę SetValue, co wydaje się trochę nie na miejscu, kiedy można po prostu użyć indeksatorów. Czy istnieje jakiś specjalny cel dla SetValue? Artykuł MSDN nie wydawał się mówić, do czego służy SetValue, tylko jak z niego korzystać. Która metoda byłaby bardziej efektywna, jeśli chodzi o prędkość?Używanie metody SetValue macierzy kontra [] indulatory

Odpowiedz

15

Czasami jedyne, co masz w tablicy to to, że jest to Array. Klasa Array nie ma indeksatorów, więc najlepszym sposobem na ustawienie/pobranie wartości elementów jest użycie metod: GetValue i SetValue. Na przykład:

private void M(Array array) 
{ 
    array[0] = 5;   // <-- Compiler error 
    array.SetValue(5, 0); // <-- Works 
} 
+3

Ponadto, jeśli nie wiem liczbę wymiarów tablicy w czasie kompilacji, można użyć 'UstawWartość (obiekt, Int32 [])' przeciążenie określenie elementów w czasie wykonywania: http : //msdn.microsoft.com/en-us/library/758awxk7.aspx –

+0

Gdzie zaczynają się indeksy? Można by się spodziewać 0, ale dzisiaj napotkałem wartość zwróconą przez komponent COM z tablicą typu .NET, ale indeksy zaczynały się od 1, a nie od –

+0

@PeterMortensen, COM jest rzeczywiście przerażającym miejscem. :) Ale to interesująca informacja. –