【问题标题】:VB.NET - Find a Substring in an ArrayList, StringCollection or List(Of String)VB.NET - 在 ArrayList、StringCollection 或 List(Of String) 中查找子字符串
【发布时间】:2010-06-07 09:59:53
【问题描述】:

我有一些代码可以创建用户所属的 AD 组列表,目的是说“如果用户是 GroupX 的成员,则允许管理员访问,如果不允许基本访问”。

我使用 StringCollection 来存储此组列表,并打算使用 Contains 方法来测试我的管理组的成员资格,但问题是此方法仅比较完整字符串 - 但我的 AD 组值是格式为cn=GroupX, etc...。

我希望能够轻松确定特定子字符串(即“GroupX”)是否出现在组列表中。我总是可以遍历组,检查每个代表我的 AD 组名称的子字符串,但我更感兴趣的是找出是否有“更好”的方法。

显然,组列表有许多存储库,并且似乎更普遍首选泛型 (List(Of String))(无论如何我都可以实现),但没有内置的检查方法也可以使用此方法的子字符串。

有什么建议吗?还是我应该只遍历组列表?

结果:

我已决定使用 List(Of),并借用了 Dan 的代码来遍历列表。

【问题讨论】:

    标签: vb.net generics collections substring


    【解决方案1】:

    我认为您不会找到比枚举集合更好的方法*。

    也就是说,这是一个独立于集合类型的好方法:

    Public Function ContainsSubstring(ByVal objects As IEnumerable, ByVal substring As String) As Boolean
        Dim strings = objects.OfType(Of String)()
        For Each str As String in strings
            If str.Contains(substring) Then Return True
        Next
    
        Return False
    End Function
    

    这是解决“使用哪个集合?”的好方法。问题因为基本上所有集合,无论是否通用(ArrayList、List(Of String) 等),实现IEnumerable。

    *我相信这即将到来的理由。

    【讨论】:

      【解决方案2】:

      编写一个辅助函数来遍历检查子字符串的项目并返回一个布尔标志似乎是你最好的选择。

      【讨论】:

      • 这就是我在此期间正在做的事情,这没什么大不了的......但我只是对替代品感到好奇,如果有的话 - 你不能有太多选择!
      【解决方案3】:

      您可以为此使用谓词函数。这是一个布尔函数,可以帮助您过滤掉一些条目。

      例如,从列表中获取非隐藏文件:

      Public ReadOnly Property NotHiddenFiles As List(Of FileInfo)
      
          Get
              Dim filesDirInfo As New DirectoryInfo(FileStorageDirectory)
              Return filesDirInfo.GetFiles.ToList.FindAll(AddressOf NotHiddenPredicate)
          End Get
      
      End Property
      
      
      
      Private Function NotHiddenPredicate(ByVal f As FileInfo) As Boolean
      
          Return Not ((f.Attributes And FileAttributes.Hidden) = FileAttributes.Hidden)
      
      End Function
      

      【讨论】:

        猜你喜欢
        • 2010-10-14
        • 2012-10-27
        • 1970-01-01
        • 2022-01-09
        • 2015-07-14
        • 1970-01-01
        • 2020-11-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多