#c# #.net #expression
#c# #.net #выражение
Вопрос:
Я упростил программу, которая использует выражения:
public class Program
{
public static IEnumerable<char> foo1()
{
// For some reason I cannot change result type
return new char[] { 's', '1' };
}
public static string foo2()
{
// For some reason I cannot change result type
return "s1";
}
static void Main()
{
Expression cond = Expression.Condition(Expression.Constant(true),
Expression.Call(typeof(Program).GetMethod("foo1")),
Expression.Call(typeof(Program).GetMethod("foo2")));
}
}
Во время выполнения у меня возникает следующая ошибка
Типы аргументов не совпадают.
Как я понял, c # не использует неявное приведение типов. Как я могу решить эту проблему?
Ответ №1:
При построении выражений это не приведет к добавлению неявных преобразований для вас. Вам необходимо конкретно указать, что вы хотите применить оператор (ы) преобразования с помощью Expression.Convert
.
Expression cond = Expression.Condition(Expression.Constant(true),
Expression.Call(typeof(Program).GetMethod("foo1")),
Expression.Convert(Expression.Call(typeof(Program).GetMethod("foo2")), typeof(IEnumerable<char>)));