Can you assign a function to a variable in C#?
Func<double,double> square = x => x * x;
// for recursion, the variable must be fully
// assigned before it can be used, therefore
// the dummy null assignment is needed:
Func<int,int> factorial = null;
factorial = n => n < 3 ? n : n * factorial(n-1);
Any of the following more verbose forms is possible, too: (I'm using square
as an example):
Func<double,double> square = x => { return x * x; };
The expression is expanded to a statement block.Func<double,double> square = (double x) => { return x * x; };
Explicit parameter list instead of just one parameter with inferred type.Func<double,double> square = delegate(double x) { return x * x; };
This one uses the older "anonymous delegate" syntax instead of so-called "lambda expressions" (=>
).
P.S.: int
might not be an appropriate return type for a method such as factorial
. The above examples are only supposed to demonstrate syntax, so modify them as necessary.
You can create delegate type declaration:
delegate int del(int number);
and then assign and use it:
del square = delegate(int x)
{
return x * x;
};
int result= square (5);
Or as said, you can use a "shortcut" to delegates (it made from delegates) and use:
Func<[inputType], [outputType]> [methodName]= [inputValue]=>[returnValue]
for example:
Func<int, int> square = x=>x*x;
int result=square(5);
You also have two other shortcuts:
Func with no parameter: Func<int> p=()=>8;
Func with two parameters: Func<int,int,int> p=(a,b)=>a+b;