11

メソッド グループを式に変換するための簡単な構文があるかどうかを調べようとしています。ラムダで十分に簡単に思えますが、メソッドには変換されません:

与えられた

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

最後の 2 つは両方とも、「メソッド グループ 'AFuncIntInt' を非デリゲート型 'System.Linq.Expressions.Expression<...>' に変換できません。メソッドを呼び出すつもりでしたか?」というエラーでコンパイルに失敗します。

では、式でメソッド グループをキャプチャするための適切な構文はありますか?

ありがとう、アルネ

4

3 に答える 3

9

これはどう?

  Expression<Func<int, int>> funcExpr2 = (pArg) => foo.AFuncIntInt(pArg);
  Expression<FuncIntInt> delExpr2 = (pArg) => foo.AFuncIntInt(pArg);
于 2009-06-16T22:01:49.650 に答える
0

NJection.LambdaConverterデリゲートから LambdaExpression へのコンバータ ライブラリを使用してそれを行うことも可能です。

public class Program
{
    private static void Main(string[] args) {
       var lambda = Lambda.TransformMethodTo<Func<string, int>>()
                          .From(() => Parse)
                          .ToLambda();            
    }   

    public static int Parse(string value) {
       return int.Parse(value)
    } 
}
于 2013-12-21T19:19:17.407 に答える