2010-06-07 70 views
1

我有一些代碼可以創建用戶所屬的AD組列表,其目的是說'if user是GroupX的成員,然後允許管理員訪問,如果不允許基本訪問'。VB.NET - 在ArrayList,StringCollection或List(字符串)中查找子串

我正在使用一個StringCollection存儲這個組列表,並打算使用Contains方法來測試我的管理組的成員資格,但問題是這個方法只比較完整的字符串 - 但是我的AD組值格式爲cn=GroupX, etc...

我想很容易確定一個特定的子字符串(即'GroupX')是否出現在組列表中。我總是可以通過組遍歷檢查每個代表我的AD組名稱的子字符串,但我更感興趣的是瞭解是否有更好的方法。

很明顯,有許多存儲庫用於組列表,並且看起來泛型(List(Of String))更常用(我可能很容易實現),但是沒有內置的方法來檢查子字符串使用這種方法。

有什麼建議嗎?或者我應該只是遍歷組列表?

結果:

我已經定居在使用列表(),並且我從丹的代碼借來通過列表進行迭代。

回答

2

我不認爲你會找到一個比枚舉在收集*一個更好的方法。

這就是說,這裏是做一個很好的方式,這將是獨立的集合類型的:「要使用的收集」

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 

這是解決的好辦法因爲基本上所有的收集,通用或不(ArrayListList(Of String)等),實施IEnumerable

*爲什麼我相信即將到來的理由。

+0

+1爲靈活的解決方案,公司。代碼示例(始終歡迎)。 – CJM 2010-06-07 14:08:57

1

編寫一個幫助函數,它將遍歷檢查子字符串的項目並返回一個布爾標誌,這似乎是您最好的選擇。

+0

這就是我在此期間所做的事情,這不是什麼大問題......但我只是對替代品感到好奇,如果有的話 - 你不能有太多的選擇! – CJM 2010-06-07 10:58:30

0

您可以使用謂詞函數。這是一個布爾函數,它可以幫助你過濾掉一些條目。

例如,從列表中得到非隱藏文件:

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