2015-08-11 2 views
0

Из любопытства Я изучал методы делегатов и заинтересован в получении имени текущего метода делегата, который используется (просто для удовольствия, действительно).Получить имя метода делегата

код у меня выглядит следующим образом (с текущими/желаемых результатов):

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 

Кто-нибудь знает какой-либо способ (ы) я мог бы достичь этого? Благодарю.

ответ

4

Ваши методы являются анонимными делегатами, поэтому компилятор дает каждому из них имя, у которого нет никакого значимого соединения с именем переменной. Если вы хотите, чтобы они имели лучшие имена, то сделать их фактические методы:

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

и т.д. Затем ссылаться на них по имени:

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

Обратите внимание, что this. является необязательным, но показывает, что они являются членами класса, а чем локальные переменные.

Смежные вопросы