Jak zaimplementować indeksator Array w języku C #
mogę pisać
Square[,,,] squares = new Square[3, 2, 5, 5];
squares[0, 0, 0, 1] = new Square();
W rzeczywistości spodziewam się, że mógłbym kontynuować dodawanie wymiarów do Int.MaxValue, chociaż nie mam pojęcia, ile pamięci wymagałoby.
Jak mogę zaimplementować tę funkcję indeksowania zmiennych w mojej klasie? Chcę hermetyzować wielowymiarową tablicę o nieznanych wymiarach i udostępnić ją jako właściwość, umożliwiając w ten sposób indeksowanie. Czy zawsze muszę znać rozmiar, w jakim przypadku działa Array?
EDYTOWAĆ
Dzięki za komentarze, oto co otrzymałem - pomyślałem o paramach, ale nie wiedziałem, po co to robić, nie wiedząc o GetValue.
class ArrayExt<T>
{
public Array Array { get; set; }
public T this[params int[] indices]
{
get { return (T)Array.GetValue(indices); }
set { Array.SetValue(value, indices);}
}
}
ArrayExt<Square> ext = new ArrayExt<Square>();
ext.Array = new Square[4, 5, 5, 5];
ext[3, 3, 3, 3] = new Square();
TBH nie potrzebuję tego teraz. Po prostu szukałem sposobu na rozszerzenie Array, aby zainicjował jego elementy, postanawiając uniknąć kodu inicjującego dla pętli poza klasą, gdy korzystałem z wielu tablic (głównie w testach jednostek). Następnie trafiłem na intellisense i zobaczyłem metodę Initialize ... chociaż ogranicza mnie do domyślnego konstruktora i typów wartości. W przypadku typów referencyjnych wymagana byłaby metoda rozszerzenia. Wciąż się czegoś nauczyłem i tak, wystąpił błąd podczas wykonywania macierzy z ponad 32 wymiarami.