Die Zuordnung einer Funktion zu einem Ausdruck und Umgekehrt

War ich Manipulationen mit Ausdrücken und ich war verwirrt an einigen stellen

  1. Können wir zuordnen gleichen LamdaExpression sowohl die Expression und/oder Func. Aber wir können nicht zuordnen einer Funktion zu einem Ausdruck (oder ein Ausdruck, Func). Warum kann nicht wir das tun? Ich sah, wenn eine conversion operator zwischen Ausdruck und Func definiert ist, aber ich konnte keine gefunden.

    Func<int, int> sumFunc            = i => i + i;
    Expression<Func<int, int>> sumExp = i => i + i;
    
    //sumExp = sumFunc; //Cannot convert source type 'System.Func<int,int>' to target type 'System.Linq.Expressions.Expression<System.Func<int,int>>'
    //sumFunc = sumExp; //Cannot convert source type 'System.Linq.Expressions.Expression<System.Func<int,int>>' to target type 'System.Func<int,int>'
  2. Selbst können wir nicht zuordnen LambdaExpression auf ein Objekt. Wieder, warum wir nicht das tun?

    //object o = i => i + i; //Cannot convert source type 'lambda expression' to target type 'object'
  3. Ich denke, es ist etwas über compiler. Wenn dem so ist, können wir schreiben unsere benutzerdefinierte Typen diese Verhalten sich in dieser (verwirrenden) Art und Weise und nutzen etwas.

  • Sie können Aufruf von compile() auf einen Ausdruck-Baum zu bekommen func. Der andere Weg ist weitgehend unmöglich: es erfordert ein AST, das ist sehr schwer zu konstruieren zu beliebigem IL
InformationsquelleAutor Mehmet Ataş | 2013-01-05
Schreibe einen Kommentar