@kolkinv
Начинающий asp.net разработчик

Методы-индексаторы в чем суть если можно использовать расширенные колекции?

При обученни столкнулся с методами индексаторами, тоесть это так назвываемые масивы которые помогоют делать итерацию обьектов класа.
Только вот сути их никак не могу уловить, вот пример кода.
class Piramidy
{
public string Nazwanie { get; set; }
public string ImiaFaraona{ get; set; }
public int VysotaPiramidy{ get; set; }
public Piramidy (string Nazwanie, string ImiaFaraona, int VysotaPiramidy)
{
this.Nazwanie = Nazwanie;
this.ImiaFaraona = ImiaFaraona;
this.VysotaPiramidy = VysotaPiramidy;
}

}

class Egipt : IEnumerable
{
public ArrayList PiramidsOnEgipt = new ArrayList();
// вот тут тот самы метод - индексатор
public Piramidy this[int index]
{
get { return (Piramidy)PiramidsOnEgipt[index]; }
set { PiramidsOnEgipt.Insert(index, value); }
}
public int Count
{
get { return PiramidsOnEgipt.Count; }
}
public IEnumerator GetEnumerator()
{
return PiramidsOnEgipt.GetEnumerator();
}

}

ну и теперь мы можем создать что то такое :

static void Main(string[] args)
{
Egipt egiptWithP = new Egipt();
egiptWithP[0] = new Piramidy("Heopsa", "Tutanhamon", 200);
}

В чем соль такой комбинации ? разве не проще сделать это с помощю обобщенных типов ? которые уже дают готовую модель для работы ? например List
  • Вопрос задан
  • 211 просмотров
Решения вопроса 1
@kttotto
пофиг на чем писать
В Вашем примере логика индексатора проста, поэтому смысл не виден.

Приведу пример из жизни. Мне надо было хранить и отображать данные в виде, где в первой строке одно значение, во второй строке два значения, в третьей - три и т.д. Отображались в ui они в виде пирамиды. Первая мысль, это квадратный двумерный массив по размеру самой большой последней строки и пустое пространство вершины забить нолями. Отобразить такой массив пирамидой легко. Но тогда у меня возникала трудность в работе с этим массивом, т.к. чтобы забрать нужные значения, нужно правильно отсекать пустые значения, да и как-то не комильфо кучу не нужных значений хранить. Следом приходит мысль сделать массив массивов с разной длинной, но чтоб сделать итерацию по такому массиву, а потом отобразить, нужно тоже лишние телодвижения делать. И тогда я сделал обычный список, где данные хранились в порядке как 1, 21, 22, 31, 32, 33 и т.д., но приделал ему индексатор [ , ], где я указывал строку и положение в строке, а логика этого индексатора уже высчитывала реальное значение элемента: ноль (т.е. пустое пространство у верхушки пирамиды) или значение из списка.
Во первых я решил проблему лишних значений, во вторых, по данным я мог пройтись одним форичем, а не вложенными форами, без проверок лишних значений и в третьих - отображалось также легко как и двумерный массив.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks Куратор тега C#
Это сделано для удобства, как свойства или индексация (ведь раньше писали array+index вместо array[index]).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы