Является ли list [i] псевдонимом для list.get_item (i) в C #? - PullRequest
4 голосов
/ 01 июня 2011

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

В этом случае 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 #?

Ответы [ 4 ]

8 голосов
/ 01 июня 2011

Да, свойства в общем случае являются просто синтаксическим сахаром для методов get_PropertyName и set_PropertyName.

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

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

2 голосов
/ 01 июня 2011

Документация для List<T> говорит об этом так:

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

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

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

0 голосов
/ 01 июня 2011

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

0 голосов
/ 01 июня 2011

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

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

...