Что означает "это [0]" означает в С#?

Я просматривал некоторый код библиотеки и видел такой метод, как:

public CollapsingRecordNodeItemList List
{
    get { return this[0] as CollapsingRecordNodeItemList; }
}

Класс, содержащий этот метод, не является списком или чем-то итерабельным, так что означает this[0]?

Ответ 1

Найдите indexer в классе.

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

Вот пример из официального руководства для "SampleCollection".

public T this[int i]
    {
        get
        {
            // This indexer is very simple, and just returns or sets 
            // the corresponding element from the internal array. 
            return arr[i];
        }
        set
        {
            arr[i] = value;
        }
    }

Вот определение из официальной спецификации языка:

Индекс - это член, который позволяет индексировать объекты так же, как и массив. Индексатор объявляется как свойство, за исключением того, что это имя элемента, за которым следует список параметров, написанный между разделителями [и]. Параметры доступны в аксессуарах (-ах) индексатора. Подобно свойствам, индексаторы могут быть прочитаны и записаны, доступны только для чтения и только для записи, а аксессоры (и) индексатора могут быть виртуальными.

Полное и полное определение можно найти в разделе 10.9 Indexers спецификации.

Ответ 2

Это означает, что тип объявления (или базовый класс) имеет "индексатор", который предположительно принимает int (или аналогичный) и возвращает... что-то (возможно, object?). Код вызывает индексатор get accessor, передавая 0 в качестве индекса - и затем обрабатывает возвращаемое значение как CollapsingRecordNodeItemList (или null возвращаемое значение несовместимо с этим).

Например:

public object this[int index] {
    get { return someOtherList[index]; }
}

Проще всего сделать это шаг в это. Это скажет вам точно, где он собирается.

Ответ 3

Предполагая, что сам класс наследуется от какой-либо формы, если IList/IList<T>, он просто возвращает (и отличает) первый элемент в коллекции.

public class BarCollection : System.Collections.CollectionBase
{
    public Bar FirstItem
    {
        get { return this[0] as Bar; }
    }

    #region Coming From CollectionBase
    public Object this[ int index ]  {
        get { return this.InnerList[index]; }
        set { this.InnerList[index] = value; }
    }
    #endregion
}

Ответ 4

Это означает вызов метода item property get в этом классе. Он назвал класс Indexer

Индексаторы позволяют индексировать экземпляры класса или структуры как массивы. Индексаторы напоминают свойства, за исключением того, что их аксессоры принимают параметры.