Wie bekomme ich Parameternamen aus einem Ausdrucksbaum?

c# expression-trees

Frage

Ich habe einen Ausdruck dieser Art:

Expression<Action<T>> expression

Wie bekomme ich die Parameter Namen von diesem Ausdruck (optional: und Werte)?

Beispiel:

Expression<Action<T>> expression

Namen könnten str_par1, int_par2, obj_par3 sein

Akzeptierte Antwort

Expression<Action<Thing>> exp = o => o.Method(1, 2, 3);
var methodInfo = ((MethodCallExpression)exp.Body).Method;
var names = methodInfo.GetParameters().Select(pi => pi.Name);

Beliebte Antwort

Sie können die Parameternamen aus der Parameters Eigenschaft Parameters .

Beispielsweise:

    Expression<Action<string, int>> expr = (a, b) => (a + b).ToString();
var names = expr.Parameters.Select(p => p.Name);  //Names contains "a" and "b"

Für den zweiten Teil sind Lambda-Ausdrücke nur unkompilierte Funktionen.
Ihre Parameter haben keine Werte, bis Sie den Ausdruck kompiliert und den Delegaten mit einigen Werten aufgerufen haben.

Wenn Sie den Lambda-Ausdruck i => i.ToString() , wo gibt es Parameterwerte?




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum