2010-01-19 94 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循環更清晰的超越我。 – 2010-01-20 00:03:12

+1

我認爲所提出的解決方案對於foreach循環同樣清楚。 – recursive 2010-01-20 17:39:53

+0

我不知道,但我認爲每個人都是他們自己的。 – 2010-01-21 00:51:56

回答

16

使用Any LINQ擴展方法:

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

這樣,只要找到一個匹配,將停止執行。

8

嘗試:

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

偉大的思想,偉大的思想。直到換行。 – recursive 2010-01-19 23:25:15

+0

@recursive:是的,我看到水平滾動條,其餘的是歷史:) – 2010-01-19 23:27:27

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 2010-01-21 00:32:15

相關問題