我试图弄清楚是否有一个简单的语法可以将方法组转换为表达式。使用 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);