Expression.Call и "Найдено неоднозначное совпадение" - PullRequest
8 голосов
/ 05 октября 2010

Я пытаюсь написать выражение, которое будет вызывать ToString для свойства и присвоить его значение локальной переменной. Однако вызов ToString для экземпляра объекта с перегрузкой ToString вызывает исключение «Неоднозначное совпадение найдено». Вот пример:

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

);

Как я могу вызвать ToString, если экземпляр имеет перегрузки для него? Спасибо!

1 Ответ

13 голосов
/ 05 октября 2010

Заменить:

typeof(string).GetMethod("ToString")

С:

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

Другими словами, получить метод с именем «ToString», который принимает нулевые аргументы (пустой массив типов).

...