2014-11-07 3 views
0

У меня есть Type из {System.Collections.ObjectModel.ObservableCollection} и реализует следующие интерфейсыПочему ObservableCollection не реализует IList?

enter image description here

Это мой код, чтобы проверить, если тип реализует IList

if (type.IsGenericType && type.GetInterfaces().Contains(typeof(IList<>))) 
{ 
    type = type.GetGenericArguments()[0]; 
    enclosedType = EnclosedType.List; 
} 

Почему это не работает? Я чувствую, что мне не хватает чего-то очевидного.

+2

[IList] (http://msdn.microsoft.com/en-us/library/system.collections.ilist (v = vs.110) .aspx) и [IList ] (http://msdn.microsoft.com/en-us/library/5y536ey6 (v = vs.110) .aspx) - это два разных интерфейса. –

+0

'' System.Collection.Generic.IList'1 [MusicTracker.Model.Track] '' (или 'System.Collection.Generic.IList ' в нотации C#) не совпадает с '' System.Collection.Generic.IList'1 [T] '' (C# 'System.Collection.Generic.IList <>'). Один из них является закрытым родовым типом, а другой - общим определением типа. И оба они не связаны с не-generic 'System.Collections.IList'. –

ответ

8

Как указано ниже. Он реализует IList<TheType>, а не IList Вам необходимо проверить общие определения типов для интерфейсов.

Пример:

type.GetInterfaces() 
    .Where(i => i.IsGenericType) 
    .Select(i => i.GetGenericTypeDefinition()) 
    .Contains(typeof(IList<>)); 
Смежные вопросы