Как объединить два выражения: закончитесь = exp1 (exp2);

NNTP не мертв. Это просто пахнет забавным.

К сожалению, в эти дни, если Вы хотите следовать за 10 различными форумами затем, Вы должны иметь 10 различных учетных записей и изучить 10 различных UIs. Мне нравится способность выбрать диктора, что я люблю и имею тот же интерфейс для всех моих групп новостей. OpenID может возвратить часть этого, но я боюсь, что "новый Интернет" просто не заботится о совместимости как "старый Интернет", сделал.

6
задан Kamarey 13 August 2009 в 08:30
поделиться

1 ответ

This is really just a specific form of combining two Expression> values. Here's an example of doing that:

using System;
using System.Linq.Expressions;

public class Test
{
    public static Expression<Func<T, T>> Apply<T>
        (Expression<Func<T, T>> first, Expression<Func<T, T>> second)
    {
        ParameterExpression input = Expression.Parameter(typeof(T), "input");
        Expression invokedSecond = Expression.Invoke(second,
                                                     new Expression[]{input});
        Expression invokedFirst = Expression.Invoke(first,
                                                    new[]{invokedSecond});
        return Expression.Lambda<Func<T, T>>(invokedFirst, new[]{input});
    }

    static void Main()
    {
        var addAndSquare = Apply<int>(x => x + 1,
                                      x => x * x);

        Console.WriteLine(addAndSquare.Compile()(5));
    }
}

You could write ApplySequence in those terms easily, if you wanted to:

    public static Expression<Func<IEnumerable<T>, IEnumerable<T>>>
         ApplySequence<T>
            (Expression<Func<IEnumerable<T>, IEnumerable<T>>> first,
             Expression<Func<IEnumerable<T>, IEnumerable<T>>> second)
    {
        return Apply(first, second);
    }
8
ответ дан 16 December 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: