我有以下代码行来获取对象的属性,该对象在运行时被验证为字典对象。
Dim properties As System.ComponentModel.PropertyDescriptorCollection = _
System.ComponentModel.TypeDescriptor.GetProperties(pObject)
但它在属性结果中也包含Comparer属性。我该如何排除该财产?有谁知道任何解决方法? 谢谢你的帮助!
答案 0 :(得分:1)
如果您知道要排除的属性(按名称),则可以明确排除它们。但是PropertyDescriptorCollection
类型是一个奇怪的类型,因为它是IEnumerable
,但它不是IEnumerable<PropertyDescriptor>
,另外,如果你通过GetProperties
得到它,则称它是只读的,所以你不能直接从中删除。
您可以做的是创建一个新列表,移动您需要的所有内容,然后从新列表中创建PropertyDescriptorCollection
,如下所示:
Dim pObject = New Dictionary(of string, string)
Dim properties As PropertyDescriptorCollection = _
TypeDescriptor.GetProperties(pObject)
' create a new list
Dim propList = new List(of PropertyDescriptor)
' loop through the properties
For Each propertyDesc in properties
If propertyDesc.Name <> "Comparer"
'add those you need to the list
propList.Add(propertyDesc)
End If
Next
'make a new collection with the properties you need
properties = new PropertyDescriptorCollection(propList.ToArray)