Вопрос по c#-3.0, lambda, method-group, expression – Преобразовать группу методов в выражение

8

Я пытаюсь выяснить, существует ли простой синтаксис для преобразования группы методов в выражение. Кажется, с лямбдами это довольно просто, но это не переводится к методам:

Дано

<code>public delegate int FuncIntInt(int x);
</code>

все нижеуказанные действительны:

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

Но если я попробую то же самое с методом экземпляра, он сломается в выражениях:

<code>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
</code>

Оба из последних двух не могут быть скомпилированы с «Невозможно преобразовать группу методов» AFuncIntInt & apos; для типа без делегата "System.Linq.Expressions.Expression & lt; ... & gt;". Вы намеревались вызвать метод? & Quot;

Так есть ли хороший синтаксис для захвата метода grou в выражении?

Спасибо, Arne

Ваш Ответ

2   ответа
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)
    } 
}
8

Как насчет этого?

  Expression<Func<int, int>> funcExpr2 = (pArg) => foo.AFuncIntInt(pArg);
  Expression<FuncIntInt> delExpr2 = (pArg) => foo.AFuncIntInt(pArg);
Dooh .. Я чувствую себя глупо сейчас. Это работает отлично. Спасибо Arne Claassen
Я предполагаю, что foo.AFuncIntInt - это группа методов, а не выражение, и нет автоматических преобразований из группы методов в выражения, однако существует автоматическое преобразование для принятия лямбда-выражения в качестве группы методов или выражения. Arne Claassen
Вы когда-нибудь находили лучший синтаксис для этого? Я не совсем понимаю, почему компилятор не может выяснить группу методов Expression & lt; Func & lt; что-то & gt; & gt; когда он может понять это для Func & lt; что-то & gt; ..

Похожие вопросы