【发布时间】: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