Если вы хотите проверить объект на наличие числового индексатора независимо от того, является ли он IList, а затем вызвать индексатор с помощью отражения, вы можете попробовать этот метод.
Возвращает true, если объект имеет индексатор, и также заполняет value
значением 0-го индекса.
public static bool TryGetFirstIndexWithReflection(object o, out object value)
{
value = null;
// find an indexer taking only an integer...
var property = o.GetType().GetProperty("Item", new Type[] { typeof(int) });
// if the property exists, retrieve the value...
if (property != null)
{
value = property.GetValue(list, new object[] { 0 });
return true;
}
return false;
}
Обратите внимание, что в этом примере не предпринимается попытка изящно обработать исключения, такие как IndexOutOfRangeException
. Это зависит от вас, если вы сочтете это уместным.