Как использовать неявное приведение в дереве выражений c #?

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