Nate Jenson
Nate Jenson

Reputation: 2794

Get name of delegate method

Out of curiosity I've been looking into delegate methods and am interested in getting the name of the current delegate method that is being used (just for fun, really).

The code I have is as follows (with the current/desired outputs):

private delegate int mathDelegate(int x, int y);

public static void Main()
{
    mathDelegate add = (x,y) => x + y;
    mathDelegate subtract = (x,y) => x - y;
    mathDelegate multiply = (x,y) => x * y;

    var functions = new mathDelegate[]{add, subtract, multiply};

    foreach (var function in functions){
        var x = 6;
        var y = 3;
        Console.WriteLine(String.Format("{0}({1},{2}) = {3}", function.Method.Name, x, y, function(x, y)));
    }
}

        /// Output is:
        // <Main>b__0(6,3) = 9
        // <Main>b__1(6,3) = 3
        // <Main>b__2(6,3) = 18

        /// Desired output
        // add(6,3) = 9
        // subtract(6,3) = 3
        // multiply(6,3) = 18

Does anyone know of any way(s) I could achieve this? Thanks.

Upvotes: 0

Views: 1385

Answers (1)

D Stanley
D Stanley

Reputation: 152556

Your methods are anonymous delegates, so the the compiler gives each of them a name that doesn't have any meaningful connection back to the variable name. If you want them to have better names then make them actual methods:

public int Add(int x, int y)
{ 
   return x + y ;
}

etc. Then reference them by name:

var functions = new mathDelegate[]{this.Add, this.Subtract, this.Multiply};

Note that the this. is optional but illustrates that they are class members rather than local variables.

Upvotes: 4

Related Questions