Expression.Call e "Match ambiguo trovato"

c#-4.0 expression-trees

Domanda

Sto cercando di scrivere un'espressione che chiamerà ToString su una proprietà e assegnerà il suo valore a una variabile locale. Tuttavia, chiamando ToString su un'istanza dell'oggetto con un sovraccarico di ToString, viene generata un'eccezione di "Ambigous Match Found" da lanciare. Ecco un esempio:

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))

);

Come posso chiamare ToString se l'istanza ha sovraccarichi per esso? Grazie!

Risposta accettata

Sostituire:

typeof(string).GetMethod("ToString")

Con:

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

In altre parole, ottenere il metodo denominato "ToString" che accetta zero argomenti (array di tipo vuoto).



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché