将类型发送到通用列表的困难

时间:2011-11-23 13:14:07

标签: vb.net generics types

我正在尝试使用通用列表,而不知道加载页面时的类型。我有一个typePropertyCollection继承自List(Of PropertyData)。使用此集合的usercontrol不知道使用了哪种类型的数据(哪些对象)。因此,当页面加载时,我使用dependencyproperty将类型传递给usercontrol。此类型最终以此方法结束:

Private Shared Sub OnObjectTypeChanged(ByVal obj As DependencyObject, ByVal args As DependencyPropertyChangedEventArgs)
    Dim objectType As Type = TryCast(args.NewValue, Type)
    Dim aList As List(Of PropertyData) = New TypePropertyCollection(Of objectType)
End Sub

我可以成功从EventArgs中检索类型并将其放入变量中。当我创建一个新的typePropertyCollection时,我希望将该类型传递给泛型列表,但是它表示objectType没有定义,尽管is只是在上面的行中声明。

有什么建议吗?

修改

类typepropertyCollection如下所示:

Public Sub New()
    Dim properties = New List(Of PropertyInfo)(GetType(T).GetProperties(BindingFlags.Public Or BindingFlags.Instance))
    For Each propertyToCheck In properties
        Dim descriptionAttribute = propertyToCheck.GetCustomAttributes(GetType(DescriptionAttribute), True)
        If Not descriptionAttribute Is Nothing AndAlso descriptionAttribute.Length > 0 Then
            Add(New PropertyData() With {.Description = DirectCast(descriptionAttribute(0), DescriptionAttribute).Description, .PropertyName = propertyToCheck.Name})
        Else
            Add(New PropertyData() With {.Description = propertyToCheck.Name, .PropertyName = propertyToCheck.Name})
        End If
    Next
End Sub

要使用此集合,我正在创建一个继承自typcollection的新类:

Public Class CustomerTypePropertyCollection
    Inherits TypePropertyCollection(Of Person)
End Class

我不能这样做,因为Person(我在这里将其命名为Person以使其更容易)在该解决方案中是未知的。还应该可以收集其他已知或未知的类型。这就是为什么我想传递对象的类型并以这种方式使用它。

1 个答案:

答案 0 :(得分:1)

Dim aList As List(Of PropertyData) = New TypePropertyCollection(Of Type)

此错误是因为您正在尝试创建Type'objectType'的TypePropertyCollection,objecttype是类型为type的变量的变量名。'。您需要类型类型Type的TypePropertyCollection,而不是变量名称。如果还有其他问题,请回复我。