2010-01-19 15 views
6

C'è un modo migliore per farlo?Query Linq: questa matrice contiene questa stringa?

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

L'insensibilità del case nel confronto è importante.

+1

Come è più chiaro di un semplice ciclo foreach è oltre me. –

+1

Penso che le soluzioni proposte siano ugualmente chiare per un ciclo foreach. – recursive

+0

Io no, ma a ciascuno credo. –

risposta

16

utilizzare il metodo di estensione Any LINQ:

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

In questo modo, non appena viene trovata una corrispondenza, l'esecuzione si fermerà.

8

Prova:

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

Grandi menti, grandi menti. Giusto fino all'interruzione della linea. – recursive

+0

@recursive: sì, ho visto che la barra di scorrimento orizzontale e il resto sono cronologia :) –

4

Un'alternativa non LINQ:

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

ne dici di questo?

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

    return false; 
} 

Davvero, è così semplice, ora tornare al lavoro risolvere reali problemi. ;)

+1

Ya ya buon punto, ma mi interessa anche imparare le funzionalità della lingua :). – noctonura

Problemi correlati