Considérese este fragmento de código:¿Por qué las lambdas en C# parecen manejar los valores de retorno booleanos de manera diferente?
Func<int, bool> TestGreaterThanOne = delegate(int a) {
if (a > 1) return (true);
else return(false);
};
En el código anterior, no puedo borrar el "otro de retorno (falsa)" declaración - el compilador advierte que no todas las rutas de código devuelven un valor. Pero en el siguiente código, que utiliza un lambda ...
Func<int, bool> TestGreaterThanOne = a => a > 1;
no tiene que tener una declaración "si no" - no hay advertencias del compilador y la lógica funciona como se espera.
¿Qué mecanismo está en juego aquí para hacer que no tenga una declaración "else" en mi lambda?
Solo para aclarar, la expresión lambda no tiene ningún manejo especial de bool específicamente. Puede escribir la versión de 'delegado' de la misma manera que lo hace Raymond Chen a continuación. La única especialidad lambda aquí es la falta de especificación de 'return' para una declaración en línea donde el valor de retorno puede inferirse (como lo hace en su ejemplo). –