Right now, I have: targetType.GetMethod("get_Item", BindingFlags.Instance)
Is there anything better?
Right now, I have: targetType.GetMethod("get_Item", BindingFlags.Instance)
Is there anything better?
The proper way is to retrieve the DefaultItemAttribute for the class. It has the name of the indexer property. It doesn't have to be "Item", languages like VB.NET allows specifying any property to be the indexer. Jason's code will also fail on them, there can be more than one indexed property. But only one default.
I prefer to use
PropertyInfo.GetIndexParameters
:Now
indexers
is anIEnumerable<MethodInfo>
of the getters of the indexers that match the specifiedBindingFlags
given inbindingFlags
.Note how the code reads like from the
targetType
, get the properties that match thebindingFlags
, take those that are an indexer, and then project to the getter. It is much less mysterious than using the magic string"get_Item"
, and multiple indexers are handled easily.If you know there is only one, you could of course use
Single
. If you are looking for a specific one of many, you can inspect the result ofGetIndexParameters
accordingly.