Expression.Call Метод «Содержит» throw «Исключение с неоднозначным соответствием» - PullRequest
0 голосов
/ 21 сентября 2018

в ядре .net 2.1

это мой код

//call class Expression 's method
public static MethodCallExpression Call(Expression instance, MethodInfo method, params Expression[] arguments);  
//service code
var parameter = Expression.Parameter(typeof(T), "x")
var property = Expression.Property(parameter, "Name");
var value = Expression.Constant("xx");
var converted = Expression.Convert(value, property.Type);
var exp = Expression.Call(property, property.Type.GetMethod("Contains"), converted);

//then will throw Ambiguous match found exception

Я обнаружил, что в .net core 2.1 есть 4 метода, в .net framework есть 1 метод, как я могу исправить в.net core 2.1, запустить в .net framework все нормально

методы в .net core https://i.stack.imgur.com/vNcks.png

методы в .net framework https://i.stack.imgur.com/nTvEp.png

1 Ответ

0 голосов
/ 21 сентября 2018

Как вы уже заметили, существует несколько методов, которые соответствуют названию Contains.Предполагается, что вы используете следующую перегрузку метода GetMethod (), которая позволяет указывать параметры типа метода.

var exp = Expression.Call(property, property.Type.GetMethod("Contains",/*Here you need the type parameters*/), converted);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...