C# - Индексатор в его значимом приложении

Следующее является стандартом SQL92, так должен поддерживаться большинством RDMBS, которые используют SQL:

CREATE INDEX [index name] ON [table name] ( [column name] )
7
задан Marcel Gosselin 19 November 2009 в 17:11
поделиться

6 ответов

Взгляните почти на любой из классов коллекций в структуре для примера. Если бы мне пришлось получить элемент из хеш-таблицы на языке без индексатора, я бы использовал синтаксис вроде:

object o = table.getvalue(key);

, где индексатор допускает несколько более простой синтаксис:

object o = table[key];

(намеренно игнорируя проблемы типизации / обобщения в примерах выше)

8
ответ дан 6 December 2019 в 10:00
поделиться

У вас есть несколько примеров в общих коллекциях самого фреймворка. Словарь - довольно хороший пример:

Dictionary<string, User> Users;

Users["Jorge"].ResetPassword();

Это было бы намного элегантнее и проще, чем

Users.GetElementByKey("Jorge").ResetPassword();
5
ответ дан 6 December 2019 в 10:00
поделиться

Предположим, вы разрабатываете Microsoft .NET Framework для использования другими разработчиками (что на самом деле является «реальным проектом»). Вам нужно написать класс, который действует как массив, но поддерживает динамическое изменение размера (класс List ). Без индексатора вы могли бы написать два метода для получения и установки элементов:

public T get(int index) { ... }
public void set(int index, T value) { ... }
// (Java advocates: no offense intended)

Предположим, что пользователь вашей библиотеки хочет увеличить второй элемент. Ей нужно будет написать:

list.set(1, list.get(1) + 1);

С индексатором синтаксис намного проще, читабельнее и легче для понимания:

list[1]++;

(аналогичные аргументы применимы к таким вещам, как Dictionary ...)

2
ответ дан 6 December 2019 в 10:00
поделиться

Ну, очевидным применением индексаторов является ... (сюрприз) Коллекции.

Например:

  • Списки:

     список [4]
    
  • Хеш-таблицы:

     таблица ["foo"]
    таблица [Color.Black]
    

Помните, что индексаторы не ограничиваются целочисленными аргументами.

1
ответ дан 6 December 2019 в 10:00
поделиться

Если коллекция отсортирована,

0
ответ дан 6 December 2019 в 10:00
поделиться

индексатор позволяет нам получить доступ к коллекция внутри класса, как если бы сам класс был массивом.

Хотя это правда, вы можете написать класс, который не имеет постоянный набор элементов внутри себя, но все же будет способен динамически предоставлять вам вычисленное значение при индексировании. Данные могут быть собраны в режиме реального времени из Интернета или любого другого источника данных - я представляю в качестве примера класс SearchResults , который я мог бы использовать для получения результатов поиска Google для такой строки: Console.out.WriteLine (SearchResults ["Stackoverflow"]. Count) . Он собирает данные только тогда, когда я их запрашиваю , и возвращает коллекцию извлеченных элементов.

3
ответ дан 6 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: