【问题标题】:How to compare System.Reflection.PropertyInfo.PropertyType with System.Type如何将 System.Reflection.PropertyInfo.PropertyType 与 System.Type 进行比较
【发布时间】:2013-11-20 06:32:16
【问题描述】:

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

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

第一个和第三个不能正常工作的例子有什么区别?

感谢您的回复。

【问题讨论】:

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


    【解决方案1】:

    您正在寻找Type.IsAssignableFrom

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      相关资源
      最近更新 更多