Использование Выражения C# И Или и Не выражение вместе на основе AST

Я могу сказать Вам из собственного опыта, что взаимодействие с .NET от Delphi не является никаким пикником. Я - парень .NET, но работал в .NET и магазине Delphi некоторое время. Я управлял несколькими проектами, которые записал в .NET (WinForms и WPF), но назвал Delphi. Наши парни Delphi записали уровень взаимодействия для Delphi для обращений к библиотекам .NET, так как все наши новые продукты писались в .NET. Это была проблема нам (и они были хорошими разработчиками Delphi). Если бы мы, возможно, купили хороший сторонняя библиотека, чтобы сделать interop для нас, это более, чем стоило бы того. Я держал пари, что мы потратили тысячи долларов в человеко-часах пишущие и отлаживающие проблемы с interop от Delphi до .NET.

я взял бы ту библиотеку Managed-VLC для тест-драйва, чтобы видеть, как хорошо она работает. Если это соответствует своей рекламе, то это легко стоит 250$.

6
задан 14 August 2009 в 07:39
поделиться

2 ответа

    ParameterExpression name = Expression.Parameter(typeof(string), "name"),
        value = Expression.Parameter(typeof(string), "value");

    // build in reverse
    Expression body = Expression.Constant(false);
    body = Expression.Condition(
        Expression.AndAlso(
            Expression.Equal(name, Expression.Constant("GAS")),
            Expression.Equal(value, Expression.Constant("G"))
        ), Expression.Constant(true), body);
    body = Expression.Condition(
        Expression.Equal(name, Expression.Constant("MV")),
        Expression.Constant(true), body);

    Expression<Func<string, string, bool>> featureEnabledExpTree =
        Expression.Lambda<Func<string, string, bool>>(body, name, value);


    // test in isolation
    var featureEnabledFunc = featureEnabledExpTree.Compile();
    bool isMatch1 = featureEnabledFunc("MV", "")
        && featureEnabledFunc("GAS", "G") || !featureEnabledFunc("GAS", "F");

И затем, если вам нужна вторая часть в качестве дерева выражений:

    //I want the equal of the following statement in C# Linq Expression
    Expression<Func<bool>> test =
        Expression.Lambda<Func<bool>>(
            Expression.OrElse(
                Expression.AndAlso(
                    Expression.Invoke(featureEnabledExpTree,
                        Expression.Constant("MV"),
                        Expression.Constant("")
                    ),
                    Expression.Invoke(featureEnabledExpTree,
                        Expression.Constant("GAS"),
                        Expression.Constant("G")
                    )
                ),
                Expression.Not(
                    Expression.Invoke(featureEnabledExpTree,
                        Expression.Constant("GAS"),
                        Expression.Constant("F")
                    )
                )
            )
        );

    bool isMatch = test.Compile()();
5
ответ дан 17 December 2019 в 02:31
поделиться

вот так?

Expression<Func<bool>> featureEnabledExpTree = () =>
    IsFeatureEnabled("MV", "") &&
    IsFeatureEnabled("GAS", "G") ||
    !IsFEatureEnabled("GAS", "F");
1
ответ дан 17 December 2019 в 02:31
поделиться
Другие вопросы по тегам:

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