我正在尝试使用通用列表,而不知道加载页面时的类型。我有一个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以使其更容易)在该解决方案中是未知的。还应该可以收集其他已知或未知的类型。这就是为什么我想传递对象的类型并以这种方式使用它。
答案 0 :(得分:1)
Dim aList As List(Of PropertyData) = New TypePropertyCollection(Of Type)
此错误是因为您正在尝试创建Type'objectType'的TypePropertyCollection,objecttype是类型为type的变量的变量名。'。您需要类型类型Type的TypePropertyCollection,而不是变量名称。如果还有其他问题,请回复我。