2010-06-07 5 views
1

사용자가 속한 AD 그룹 목록을 만드는 코드가 있는데 'if user GroupX의 회원이며 기본 액세스를 허용하지 않는 경우 관리자 액세스를 허용합니다. 'ArrayList, StringCollection 또는 List (String 중)에서 하위 문자열 찾기

StringCollection을 사용하여이 그룹 목록을 저장하고 Contains 메서드를 사용하여 내 admin 그룹의 구성원을 테스트하려고했으나이 메서드는 전체 문자열 만 비교하지만 문제는 내 AD 그룹 값 cn=GroupX, etc...으로 지정됩니다.

특정 하위 문자열 (예 : 'GroupX')이 그룹 목록에 나타나는지 쉽게 판단 할 수 있기를 원합니다. 그룹을 통해 반복해서 각 광고 그룹 이름을 나타내는 하위 문자열을 확인할 수는 있지만 더 나은 방법이 있는지 찾는 데 더 관심이 있습니다.

분명히 그룹 목록에 대한 저장소가 많으며 제네릭 (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 

이것은이 해결하는 좋은 방법입니다 기본적으로 모든 컬렉션 (일반 또는 이후) (ArrayList, List(Of String) 등) 이후 문제는 IEnumerable을 구현합니다.

* 왜 내가 이번 임박을 믿는 지 정당화.

+0

+1 유연한 솔루션, inc. 코드 샘플 (항상 환영). – CJM

1

하위 문자열을 검사하는 항목을 반복하고 부울 플래그를 반환하는 도우미 함수를 작성하는 것이 가장 좋은 방법 인 것 같습니다.

+0

내가 그동안하고있는 것과 그게 큰 문제는 아니지만 ... 대체로 궁금 해서요. 어떤 옵션이 있다면 - 당신은 너무 많은 옵션을 가질 수 없습니다! – CJM

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 
관련 문제