Skip to main content
 首页 » 编程设计

c#-3.0之将方法组转换为表达式

2024年07月26日15kuangbin

我试图弄清楚是否有一个简单的语法可以将方法组转换为表达式。使用 lambda 看起来很简单,但它不能转换为方法:

给定

public delegate int FuncIntInt(int x); 

以下所有内容均有效:

Func<int, int> func1 = x => x; 
FuncIntInt del1 = x => x; 
Expression<Func<int, int>> funcExpr1 = x => x; 
Expression<FuncIntInt> delExpr1 = x => x; 

但是如果我尝试使用实例方法进行相同的操作,它会在表达式处崩溃:

Foo foo = new Foo(); 
Func<int, int> func2 = foo.AFuncIntInt; 
FuncIntInt del2 = foo.AFuncIntInt; 
Expression<Func<int, int>> funcExpr2 = foo.AFuncIntInt; // does not compile 
Expression<FuncIntInt> delExpr2 = foo.AFuncIntInt;      //does not compile 

最后两个都无法编译,并显示“无法将方法组 'AFuncIntInt' 转换为非委托(delegate)类型 'System.Linq.Expressions.Expression<...>'。您打算调用该方法吗?”

那么有没有一种好的语法可以在表达式中捕获方法组?

谢谢, 阿恩

请您参考如下方法:

这个怎么样?

  Expression<Func<int, int>> funcExpr2 = (pArg) => foo.AFuncIntInt(pArg); 
  Expression<FuncIntInt> delExpr2 = (pArg) => foo.AFuncIntInt(pArg);