首页 > 解决方案 > 重置所有组件的属性,排除的属性除外

问题描述

我制作了一个子过程,它将组件的所有属性放入一个列表,然后重置它们的值,除了我声明为排除的那些。

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").

我的问题是当我试图让它排除多个属性时。我像这样更改了我的子程序:

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 StringExcludedProperties As String()

Where(Function(item) item.Name <> ExcludedProperties)Where(Function(item) item.Name IsNot ExcludedProperties)。As<>没有为 type 定义String()

我像这样使用它:Call ResetPropertiesByComponent(Me, {"ClientSize", "MinimumSize"}).

我没有收到错误或其他东西,但它也不起作用!!!任何想法?

标签: vb.netwinformslinqtypedescriptor

解决方案


您可以使用 IEnumerable -> 包含

.Where(Function(item) Not ExcludedProperties.Contains(item.Name))

快速阅读IsNot文档。它用于比较对象引用。它不会出错,因为它不应该出错,并且总是返回 True 因为你的字符串和字符串数组不一样。


推荐阅读