Доступ к свойствам обезличенного generic-класса
От: dfbag7 Россия  
Дата: 07.12.07 06:04
Оценка:
Задача следующая. Имеется DataDridView, в которой в ячейках одной из колонок лежат объекты. Каждый из этих объектов реализует интерфейс ICollection<T>, но T может быть разным. Например, один из объектов реализует ICollection<Contract>, другой — ICollection<Client>, и т.п. Мне нужно получить значение свойства Count каждого из этих объектов.

Я написал такую функцию:
/// <summary>
/// Возвращает значение свойства Count любого объекта, реализующего интерфейс ICollection{T}.
/// </summary>
/// <param name="aContainer">Любой объект, реализующий ICollection{T}</param>
/// <returns>Значение свойства Count</returns>
private static int GetCount(object aContainer)
{
   Type type = aContainer.GetType();
   foreach(Type iface in type.GetInterfaces())
   {
      if(iface.IsGenericType && iface.GetGenericTypeDefinition() == typeof(ICollection<>))
      {
         return (int)type.GetProperty("Count").GetValue(aContainer, null);
      }
   }

   throw new ArgumentException("Argument doesn't support ICollection<>", "aContainer");
}

Это решение мне не нравится, так как использует reflection и, по всей видимости, в некоторых редких случаях работать не будет.
Есть ли какое-нибудь решение, не использующее reflection?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.