variable tipo sintaxis inicializar expresiones español ejemplos c# lambda

tipo - Expresión lambda y palabra clave var en c#



lambda sintaxis (3)

Posible duplicado:
C # ¿Por qué no se puede asignar un método anónimo a var?

Tengo la siguiente declaración en c #

Func <int, int, int> add = (x, y) => x + y;

Pero cuando estoy reemplazando la declaración del lado izquierdo con la siguiente

var add = (x, y) => x + y;

Recibo un error del compilador ( no se puede asignar la expresión lambda a una variable local de tipo implícito ). ¿Por qué?


Debido a que el compilador no puede averiguar qué tipo de RHS tiene

var add = (x, y) => x + y;

Cualquier tipo que admita el operador + es un candidato y dado que el tipo de x e y no es una restricción para ser del mismo tipo. Hay muchos más operadores posibles que podrían usarse y, por lo tanto, el conjunto de tipos posibles para x e y es bastante grande, pero para poder determinar el tipo de complemento, el compilador debe poder reducir el conjunto a uno solo. escriba para x y uno para y (no es exactamente cierto, podría ser que encajaran tanto una clase base como una clase derivada) e incluso si el compilador pudiera averiguar el tipo para x e y o si especificó los tipos para diga int , aún quedaría con el hecho de que tanto Expression<Func<int,int,int>> como Func<int,int,int> son tipos posibles para agregar

Existen múltiples opciones para reducir el conjunto de tipos posibles. El compilador podría intentar ver cómo se usa la add más adelante, pero no lo hace (y potencialmente no podría entender los tipos incluso si lo hiciera)


El error que está recibiendo es porque el compilador no sabe qué tipo xey son.


La palabra clave var no funcionará, ya que las expresiones lambda se usan tanto para los delegados como los árboles de expresión y el compilador no sabe a cuál debe convertir la lambda. En otras palabras, los siguientes tipos son válidos para su (x, y) => x + y lambda: Func<int, int, int> y Expression<Func<int, int, int>> .