2012-01-21 12 views
6

Il resharper mi chiede sempre di cambiare foreach loop in linq, e ci provo. Questo mi ha bloccato.Questo foreach ha un cast nel mezzo, può essere tradotto in linq?

foreach(var fileEnvironment in fileEnvironmentSection.FileEnvironmentList) { 
    var element = fileEnvironment as FileEnvironmentElement; 
    if(element == null) { 
     //Not the expected type, so nothing to do 
    } else { 
     //Have the expected type, so add it to the dictionary 
     result.Add(element.Key, element.Value); 
    } 
} 

Il fileEnvironment viene restituito come un oggetto dalla sezione di configurazione. Questa è la ragione del cast.

risposta

10

È possibile utilizzare l'operatore di OfType:

filtri gli elementi di un oggetto IEnumerable in base a un tipo specificato.

foreach(var element in fileEnvironmentSection.FileEnvironmentList 
              .OfType<FileEnvironmentElement>()) 
{ 
    result.Add(element.Key, element.Value); 
} 

LINQ non sta andando per aiutare con il corpo del ciclo dal momento che è mutando un dizionario esistente - LINQ viene normalmente utilizzato per la creazione di nuovi dati, piuttosto che modificare dati esistenti.

Se non ti dispiace tornare qui un nuovo dizionario, si potrebbe fare:

var newResult = fileEnvironmentSection.FileEnvironmentList 
             .OfType<FileEnvironmentElement>() 
             .ToDictionary(element => element.Key, 
                element => element.Value); 
+0

Grazie mille. Questo aiuterà. – JimBoone

Problemi correlati