出于好奇,我一直在研究委托方法,并且有兴趣获取正在使用的当前委托方法的名称(只是为了好玩,真的)。
我的代码如下(使用当前/所需的输出):
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
有没有人知道我能做到的任何方式?感谢。
答案 0 :(得分:4)
您的方法是匿名委托,因此编译器为每个方法提供一个名称,该名称与变量名称没有任何有意义的连接。如果你想让它们有更好的名字,那就把它们变成实际的方法:
public int Add(int x, int y)
{
return x + y ;
}
等。然后按名称引用它们:
var functions = new mathDelegate[]{this.Add, this.Subtract, this.Multiply};
请注意this.
是可选的,但说明它们是类成员而不是局部变量。