Expression.Call und "Ambiguous Match" gefunden

c#-4.0 expression-trees

Frage

Ich versuche, einen Ausdruck zu schreiben, der ToString für eine Eigenschaft aufruft und dessen Wert einer lokalen Variablen zuweist. Wenn Sie jedoch ToString für eine Objektinstanz mit einer Überladung von ToString aufrufen, wird die Ausnahme "Ambigous Match Found" ausgelöst. Hier ist ein Beispiel:

var result = Expression.Variable(typeof(string), "result");
var matchTypeParameter = Expression.Parameter(typeof(MatchType), "matchType");
var targetProperty = Expression.Property(leadParameter, target);

var exp = Expression.Block(
  //Add the local current value variable
  new[] { result },

  //Get the target value
  Expression.Assign(result, Expression.Call(targetProperty, typeof(string).GetMethod("ToString"), null))

);

Wie kann ich ToString aufrufen, wenn die Instanz überlastet ist? Vielen Dank!

Akzeptierte Antwort

Ersetzen:

typeof(string).GetMethod("ToString")

Mit:

typeof(string).GetMethod("ToString", Type.EmptyTypes)

Mit anderen Worten, rufen Sie die Methode namens "ToString" ab, die keine Argumente benötigt (leeres Array).



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