如何将System.Reflection.PropertyInfo.PropertyType与System.Type进行比较

时间:2013-11-08 09:41:52

标签: .net vb.net types properties system.reflection

我需要从类的所有列表属性。我尝试使用以下代码:

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

所有if条款都是假的。 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

第一个和第三个不符合要求的示例之间有什么区别?

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

您正在寻找Type.IsAssignableFrom