2013-11-08 3 views
1

Мне нужно, чтобы у меня были все свойства списка. Я стараюсь это с помощью следующего кода:Как сравнить System.Reflection.PropertyInfo.PropertyType с System.Type

Public Sub foo(Of T)(source AS T) 
    source.GetType.GetProperties.ToList. 
    ForEach(Sub(item) 
     If (item.PropertyType Is GetType(IEnumerable(Of Object))) Then 'do something 
     If (TypeOf item.PropertyType Is IEnumerable(Of Object)) Then 'do something 

     If (item.PropertyType Is GetType(ICollection(Of Object))) Then 'do something 
     If (TypeOf item.PropertyType Is ICollection(Of Object)) Then 'do something 

     If (item.PropertyType Is GetType(IList(Of Object))) Then 'do something 
     If (TypeOf item.PropertyType Is IList(Of Object)) Then 'do something 

     If (TypeOf item.PropertyType Is List(Of Object)) Then 'do something 
    ) 
End Sub 

Все, если положения являются ложными. Свойство item.PropertyType содержит System.Collections.Generic.List`1 [MyNamespace.MyClass].

Следующий пример истинно

If (TypeOf New List(Of MyNamespace.MyClass) Is IEnumerable(Of Object)) Then 'do something 

и это тоже ложь

If (New List(Of MyNamespace.MyClass)().GetType Is GetType(IEnumerable(Of Object))) Then 'do something 

В чем разница между примерами, что первая и третья не работает, как хотелось ?

Благодарим за отзыв.

ответ

Смежные вопросы