2010-01-19 2 views
6

더 좋은 방법이 있나요?Linq 쿼리 :이 배열에이 문자열이 포함되어 있습니까?

public bool IsServiceRunning(string serviceName) 
    { 
     string[] services = client.AllServices(); 
     return (from s in services 
       where s.Equals(serviceName, StringComparison.InvariantCultureIgnoreCase) 
       select s).Count() > 0; 
    } 

비교에서 대소 문자 구분은 중요합니다.

+1

단순한 foreach 루프가 나보다 훨씬 더 명확한 방법. –

+1

제안 된 솔루션이 foreach 루프에서도 똑같이 명확하다고 생각합니다. – recursive

+0

나는 그렇지 않다. 그러나 그들 각각에게 나는 생각한다. –

답변

8

시도 :

public bool IsServiceRunning(string serviceName) 
{ 
    string[] services = client.AllServices(); 
    return services.Any(s => 
     s.Equals(serviceName, StringComparison.InvariantCultureIgnoreCase)); 
} 

즉시 일치하는 항목이 발견 될 때이 방법을 실행이 중지됩니다 :

return services.Any(s => 
      s.Equals(serviceName, StringComparison.InvariantCultureIgnoreCase)); 
+0

위대한 마음, 위대한 마음. 오른쪽 아래로 줄 바꿈. – recursive

+0

@ 재귀 적 : 그래, 나는 수평 스크롤바를 보았고 나머지는 역사 다. :) –

4

비 LINQ 대안 :이 방법에 대해

public bool IsServiceRunning(string serviceName) 
{ 
    string[] services = client.AllServices(); 
    return Array.Exists(services, 
     s => s.Equals(serviceName, StringComparison.InvariantCultureIgnoreCase)); 
} 
2

?

public bool IsServiceRunning(string serviceName) 
{ 
    string[] services = client.AllServices(); 
    foreach(string service in services) 
    { 
     if(service.Equals(serviceName, StringComparison.OrdinalIgnoreCase)) 
     { 
      return true; 
     } 
    } 

    return false; 
} 

정말, 간단, 지금 실제 문제를 해결하는 일에 돌아갈 것입니다. ;)

+1

나중에 좋은 지적이지만 나는 언어 기능을 배우는 것에도 관심이있다. :) – noctonura