Identifying a custom indexer using reflection in C#
You can also look for index parameters, using the the PropertyInfo.GetIndexParameters method, if it returns more than 0 items, it's an indexed property:
foreach (PropertyInfo pi in typeof(MyClass).GetProperties())
{
if (pi.GetIndexParameters().Length > 0)
{
// Indexed property...
}
}
Look for the DefaultMemberAttribute
defined at type level.
(This used to be IndexerNameAttribute
, but they seem to have dropped it)
static void Main(string[] args) {
foreach (System.Reflection.PropertyInfo propertyInfo in typeof(System.Collections.ArrayList).GetProperties()) {
System.Reflection.ParameterInfo[] parameterInfos = propertyInfo.GetIndexParameters();
// then is indexer property
if (parameterInfos.Length > 0) {
System.Console.WriteLine(propertyInfo.Name);
}
}
System.Console.ReadKey();
}