2012-01-21 7 views
6

Resharper siempre me pide que cambie los bucles foreach en linq, y lo intento. Este me dejó perplejo.Este foreach tiene un reparto en el medio, ¿se puede traducir a 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); 
    } 
} 

El fileEnvironment se devuelve como un objeto de la sección de configuración. Esa es la razón para el elenco.

Respuesta

10

Usted puede utilizar el operador OfType:

Filtra los elementos de IEnumerable en función de un tipo especificado.

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

LINQ no va a ayudar con el cuerpo del bucle, ya que está mutando un diccionario existente - LINQ se utiliza normalmente para la creación de nuevos datos en lugar de modificar datos existentes.

Si no le importa que devuelve un nuevo diccionario aquí, se podría hacer:

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

muchas gracias. Esto va a ayudar. – JimBoone

Cuestiones relacionadas