我已经子程序 >>到列表中然后 重置他们的值,除了我声明被排除的那些。
Public Shared Sub ResetPropertiesByComponent(ByVal Component As Component, ByVal ExcludedProperties As String)
Dim PropertyCollection As List(Of PropertyDescriptor) = TypeDescriptor.GetProperties(Component).OfType(Of PropertyDescriptor).
Where(Function(item) item.Name <> ExcludedProperties).
ToList()
For Each _PropertyDescriptor As PropertyDescriptor In PropertyCollection
If _PropertyDescriptor.CanResetValue(Component) Then
If _PropertyDescriptor.GetValue(Component) IsNot Nothing Then
_PropertyDescriptor.ResetValue(_Control)
End If
End If
Next
End Sub
我这样使用它:Call ResetPropertiesByComponent(Me, "ClientSize")
。
我的问题是当我尝试将其排除多个属性时。我改变了我的Sub程序:
Public Shared Sub ResetPropertiesByComponent(ByVal Component As Component, ByVal ExcludedProperties As String())
Dim PropertyCollection As List(Of PropertyDescriptor) = TypeDescriptor.GetProperties(Component).OfType(Of PropertyDescriptor).
Where(Function(item) item.Name IsNot ExcludedProperties).
ToList()
For Each _PropertyDescriptor As PropertyDescriptor In PropertyCollection
If _PropertyDescriptor.CanResetValue(Component) Then
If _PropertyDescriptor.GetValue(Component) IsNot Nothing Then
_PropertyDescriptor.ResetValue(_Control)
End If
End If
Next
End Sub
从ExcludedProperties As String
到ExcludedProperties As String()
。
从Where(Function(item) item.Name <> ExcludedProperties)
到Where(Function(item) item.Name IsNot ExcludedProperties)
。由于未为类型<>
定义String()
。
我这样使用它:Call ResetPropertiesByComponent(Me, {"ClientSize", "MinimumSize"})
。
我没有错误或其他什么,但它也不起作用!有什么想法吗?
答案 0 :(得分:2)
您可以使用IEnumerable - &gt;包含
.Where(Function(item) Not ExcludedProperties.Contains(item.Name))
快速阅读IsNot文档。它用于比较对象引用。它不会出错,因为它不应该,并且总是返回True,因为你的字符串和字符串数组不会相同。