Является ли list[i] псевдонимом для list.get_item(i) в C#?

Я передаю лямбда-выражение в качестве параметра.

В этом случае someObject имеет свойство property, доступное через someObject.property.

Когда я прохожу: o => o.childListOfObjects[0].property,

где childListOfObjects это List<someObejct> и ,

expression.Body возвращает o => o.childListOfObjects.get_Item(0).property.

Перейти к концу:

Является ли list[i] псевдонимом для list.get_item(i) в C#?


person StuperUser    schedule 01.06.2011    source источник
comment
В List‹T› нет метода getItem?   -  person thekip    schedule 01.06.2011
comment
См. Класс с индексатором и свойством с именем Item.   -  person Frédéric Hamidi    schedule 01.06.2011
comment
@thekip Я оставил в вопросе один случай getitem, а не get_item. Извиняюсь за путаницу.   -  person StuperUser    schedule 01.06.2011


Ответы (4)


Да, свойства в целом — это просто синтаксический сахар вокруг методов get_PropertyName и set_PropertyName.

Индексаторы – например, list[i] – это особый тип свойство, в основном синтаксический сахар вокруг методов get_Item(i) и set_Item(i).

(Обратите внимание, что свойство индексатора не обязательно должно называться Item, но это то, что он вызывается List<T>, и это имя по умолчанию также дается индексаторам для пользовательских типов, если только вы не переопределите его с помощью IndexerNameAttribute.)

person LukeH    schedule 01.06.2011

В документации для List<T> сказано следующее:

Свойство Item по умолчанию (индексатор в C#) используется для извлечения элемента.

Так что да, list[i] — это индексатор, который является свойством по умолчанию, в данном случае это Item. Это будет get или set Item[i] в зависимости от того, является ли контекст чтением или записью.

См. также: Индексаторы

person David Ruttka    schedule 01.06.2011

Квадратные скобки могут быть перегружены, они называются индексаторами. Итак, нам нужно знать, экземпляром какого класса является list.

РЕДАКТИРОВАТЬ: Упс, не видел, что этот список - это список. Я не уверен, какой метод вы имеете в виду, но List<T>.getItem() нет.

person Shea Levy    schedule 01.06.2011
comment
Я оставил в вопросе один случай getitem, а не get_item. - person StuperUser; 01.06.2011

не обязательно. Список определяет индексатор, который, скорее всего, просто вызовет get_item, но это не гарантируется, в индексаторе может быть определена более скрытая логика... но ответ, вероятно, да.

person Peter Perháč    schedule 01.06.2011