2010-04-22 5 views
5
private static Dictionary<Type, Func<string, object>> _parseActions 
            = new Dictionary<Type, Func<string, object>> 
    { 
     { typeof(bool), value => {Convert.ToBoolean(value) ;}} 
    }; 

Lo anterior es un error¿Por qué es uno Func válida y la otra (casi idéntico) no

Error 14 No todas las rutas de código devuelven un valor en la expresión lambda de tipo 'System.Func < cadena, objeto > '

Sin embargo, esto a continuación está bien.

private static Dictionary<Type, Func<string, object>> _parseActions 
            = new Dictionary<Type, Func<string, object>> 
    { 
     { typeof(bool), value => Convert.ToBoolean(value) } 
    }; 

No entiendo la diferencia entre los dos. Pensé que las llaves adicionales en el ejemplo1 nos permitirían usar múltiples líneas en la función anon, entonces, ¿por qué han afectado el significado del código?

Respuesta

16

La primera utiliza un bloque de código, que sólo devolverá un valor si se utiliza la palabra clave return:

value => { return Convert.ToBoolean(value); } 

La segunda, siendo sólo una expresión no requiere una explícita return.

+0

Sí, me envió la pregunta, entonces mirado para otro ooooh 30 segundos antes de que me di cuenta de mi error :) cheers – gingerbreadboy

2

El primero que no devuelve nada y debe devolver explícitamente un valor ya que tiene un ajuste, donde el segundo devuelve implícitamente un valor.

solucionarlo hacer

private static Dictionary<Type, Func<string, object>> _parseActions = new Dictionary<Type, Func<string, object>> 
{ 
    { typeof(bool), value => { return Convert.ToBoolean(value) ;}} 
}; 
Cuestiones relacionadas