8
Próbuję napisać wyrażenie, które wywoła ToString na właściwości i przypisać jej wartość do zmiennej lokalnej. Jednak wywołanie ToString na instancji obiektu z przeciążeniem ToString powoduje wyrzucenie wyjątku "Ambigous Match Found". Oto przykład:Expression.Call i "Niejednoznaczne dopasowanie znalezione"
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))
);
Jak mogę wywołać ToString, jeśli instancja ma dla niego przeciążenie? Dzięki!
To było dokładnie to, czego szukałem, dzięki! Nigdy wcześniej nie słyszałem o Type.EmptyTypes. Czy istnieje książka refleksyjna, która omawia takie rzeczy, które polecacie? –
Type.EmptyTypes jest skrótem (i nieco bardziej wydajnym niż) 'new Type [0]'. Przepraszam, nie jestem księgowym, ale nauczysz się * lot * po prostu analizując kod źródłowy do "MethodInfo", "FieldInfo" i "Type" (oprócz wszystkich metod w wyrażeniu "Wyrażenie"). –
Dzięki. Uratujesz mój dzień –