usar tipo puede programacion porque net metodos funciones expresiones expresion delegate delegados delegado convertir concepto anonimos anonimas c# .net-2.0 delegates

c# - programacion - no se puede convertir expresion lambda en el tipo delegado



Crear un tipo de delegado dentro de un método (4)

¿Por qué quieres crear el tipo de delegado dentro del método? ¿Qué hay de malo en declararlo fuera del método? Básicamente, no puede hacer esto: no puede declarar un tipo (cualquier tipo de tipo) dentro de un método.

Una alternativa sería declarar todos los delegados genéricos Func / Action que están presentes en .NET 3.5, entonces usted podría simplemente hacer:

public void MyMethod(){ Func<int, int, int> mySumImplementation = delegate (int a, int b) { return a+b; }; Console.WriteLine(mySumImplementation(1,1).ToString()); }

Las declaraciones están en mi página de versiones C # /. NET .

Quiero crear un tipo de delegado en C # dentro de un método con el fin de crear métodos anónimos.

Por ejemplo :

public void MyMethod(){ delegate int Sum(int a, int b); Sum mySumImplementation=delegate (int a, int b) {return a+b;} Console.WriteLine(mySumImplementation(1,1).ToString()); }

Lamentablemente, no puedo hacerlo en .NET 2.0 y C # 2.0.


El tipo de delegado debe definirse fuera de la función. El delegado real se puede crear dentro del método como lo hace.

class MyClass { delegate int Sum(int a, int b); public void MyMethod(){ Sum mySumImplementation=delegate (int a, int b) {return a+b;} Console.WriteLine(mySumImplementation(1,1).ToString()); } }

sería válido La mejor solución puede ser emular .NET3.5 y crear algunos tipos de delegados genéricos de forma global, que se pueden usar en toda la solución, para evitar tener que redeclarar constantemente los tipos de delegados para todo:

delegate R Func<R>(); delegate R Func<T, R>(T t); delegate R Func<T0, T1, R>(T0 t0, T1 t1); delegate R Func<T0, T1, T2, R>(T0 t0, T1 t1, T2 t2);

Luego puede usar un delegado Func<int, int, int> en su código anterior.


Los delegados se compilan en clases (una clase que hereda de System.MulticastDelegate). En C #, no está permitido declarar una clase dentro de un método (consulte la especificación del lenguaje C #). Por lo tanto, tampoco puedes declarar un delegado en un método.


¿Qué tal esto?

static void Main(string[] args) { Expression<Func<int, int, int>> exFunc = (a, b) => a + b; var lambda = exFunc as LambdaExpression; Delegate del = exFunc.Compile(); Console.WriteLine(del.DynamicInvoke(2, 2)); }