I'm passing a lambda expression as a parameter.
In this case, someObject
has a property called property
accessible with someObject.property
.
When I pass: o => o.childListOfObjects[0].property
,
where childListOfObjects
is a List<someObejct>
and ,
expression.Body
returns o => o.childListOfObjects.get_Item(0).property
.
Skip to the end:
Is list[i]
an alias for list.get_item(i)
in C#?
Yes, properties in general are just syntactic sugar around
get_PropertyName
andset_PropertyName
methods.Indexers -- for example,
list[i]
-- are just a special type of property, basically syntactic sugar aroundget_Item(i)
andset_Item(i)
methods.(Note that the indexer property doesn't necessarily have to be called
Item
, but that's what it's called onList<T>
, and that's the default name given to indexers on custom types too unless you override it usingIndexerNameAttribute
.)The documentation for
List<T>
says it this way:So yes,
list[i]
is the indexer, which is the default property, which in this case isItem
. It willget
orset
Item[i]
depending on whether the context is reading or writing.See also: Indexers
not necessarily. List defines an indexer that will most likely just call the get_item but that's not guaranteed, there might be more hidden logic defined in the indexer... but the answer is probably yes.
The square brackets can be overloaded, they're called indexers. So we need to know what class
list
is an instance of.EDIT: Whoops, didn't see that list is a List. I'm not sure what method you mean, though, there is no
List<T>.getItem()
.