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;

Tags:

C#