2013-07-24 4 views
2

"소유자"가있는 목록이 있습니다. 현재 사용자가 소유자인지 확인해야합니다. 은 그래서 시도 : (list.Contains (문자열)) :문자열에 목록이 있는지 확인하십시오.

string Owner = user.Name.ToString(); 
    if (lstOwners.Contains(Owner)) 
    { 
     btnManager.Visible = true; 
    } //does not work. 

그것은 작동하지 않습니다!

하지만 난 그렇게 할 때 작동 : 왜

if (lstOwners.Contains("BRJesusCA2")) 
    { 
     btnManager.Visible = true; 
    } 

당신이 말해 주실 래요?

소유자와 "BRJesusCA2"의 값이 같습니다.

+0

'user.Name'은 무엇입니까? 대/소문자가 일치하는지 확인하십시오. – SuperOli

+5

왜 ToString()을 호출합니까? – haim770

+2

소유자가 실제로 목록에 있습니까? – Tigran

답변

4

C#을 좀 더 효율적으로 수집을 요구 한 이후

bool contains = lstOwners.Contains(Owner, StringComparer.OrdinalIgnoreCase); 
btnManager.Visible = contains; 

대소 문자를 구분합니다. mirco - 최적화 90 항목. 그러나, 당신은 HashSet<string>로 교체 할 수 있습니다 :

HashSet<string> owners = new HashSet<string>(lstOwners, StringComparer.OrdinalIgnoreCase); 
bool isOwner = owners.Contains(Owner); 

HashSet<T> 클래스는 고성능의 설정 작업을 제공합니다. 집합은 중복 요소가없고 해당 요소가 특별한 순서가 아닌 컬렉션입니다.

+0

Tks, Tim! 이제 작동합니다! 모든 소유자와 함께 목록을 확인하는 것이 가장 좋은 방법입니까? 예를 들어, 내 목록에 90 명의 ​​소유자가 있고, 최상의 성능을 얻으려면 다른 방법이 좋을까요? – CaioVJesus89

+0

데이터베이스를 사용해야합니다. 그러나 하나를 사용하고 싶지 않거나 하나도 갖고 싶지 않다면보다 효율적으로'HashSet '을 사용할 수 있습니다. 하지만 90 개 항목에는 문제가되지 않습니다. –

+0

bool을 사용하지 않는 경우 다른 곳에서는이 줄을 단순화하여 btnManager.Visible = lstOwners.Contains (Owner, StringComparer.OrdinalIgnoreCase); 그러나 나중에 포함하고있는 것을 다시 확인하고 싶다면 위의 솔루션을 루프 뒤에서 두 번 이상 수행 할 필요없이 다시 사용하십시오. – Bearcat9425

관련 문제