Это было довольно долгое время, так как этот ответ был на борту, но только в случае, если кто-нибудь все еще ищет ответ ...
я столкнулся с подобной проблемой. Мой сценарий состоял в том, что BindingSource.DataSource всегда будет привязан к IEnumerable, но не может быть никаких элементов в списке. Оказывается, BindingSource имеет частный экземпляр, называемый «itemType». Это поле делает именно то, что вы ищете: оно отображает тип элемента списка, если BindingSource привязан к списку, или он показывает тип объекта, к которому привязан BindingSource, если список отсутствует.
Чтобы получить доступ к значению поля, я использовал некоторые Hacky отражение:
FieldInfo fi =
typeof(BindingSource)
.GetField("itemType", BindingFlags.NonPublic | BindingFlags.Instance);
Type myElementType = fi.GetValue(DataBinder.RestrictedDataBinding) as Type;
Не делая много исследований, я как бы предположить, что он делает это показывает тип элемента в InnerList, поэтому он оленья кожа Не имеет значения, является ли DataSource типом списка или нет. Кроме того, я предполагаю, что это поле будет точно показывать тип элемента любого вида списка, который поддерживается BindingSource (включая IQueryables и т. Д.).
ВНИМАНИЕ: Я НЕ тестировал это поле, поэтому не знаю, есть ли случаи, которые бы не отображали правильный тип элемента. Например, постоянно ли обновляется поле, когда свойство DataSource BindingSource перезагружается? Что делать, если свойство DataSource сбрасывается в список с другим типом elementType? В моем случае эти исключения и другие не применяются, но вы можете протестировать их.
Наконец, использование отражения для взлома в частных полях разрушает все виды принципов oop. Запомни. Кроме того, имейте в виду, что очень хорошо может быть хорошей причиной, почему поле itemType было скрыто. Если вам необходимо дополнительно исследовать, код для класса BindingSource доступен для общественности.
Проверьте этот вопрос: http://stackoverflow.com/questions/557340/c-generic-list-t-how-to-get-the-type-of-t –
@Mikael: Этот вопрос не " t, похоже, связаны; этот вопрос звучит так, как будто он имеет дело со списком * вне * класса, а не * внутри *. –