如何在使用Reflection TypeDescriptor.GetProperties获取属性时排除Comparer等词典属性?

时间:2014-04-14 15:47:51

标签: .net vb.net

我有以下代码行来获取对象的属性,该对象在运行时被验证为字典对象。

 Dim properties As System.ComponentModel.PropertyDescriptorCollection = _
                          System.ComponentModel.TypeDescriptor.GetProperties(pObject)

但它在属性结果中也包含Comparer属性。我该如何排除该财产?有谁知道任何解决方法? 谢谢你的帮助!

1 个答案:

答案 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)