Я могу сказать Вам из собственного опыта, что взаимодействие с .NET от Delphi не является никаким пикником. Я - парень .NET, но работал в .NET и магазине Delphi некоторое время. Я управлял несколькими проектами, которые записал в .NET (WinForms и WPF), но назвал Delphi. Наши парни Delphi записали уровень взаимодействия для Delphi для обращений к библиотекам .NET, так как все наши новые продукты писались в .NET. Это была проблема нам (и они были хорошими разработчиками Delphi). Если бы мы, возможно, купили хороший сторонняя библиотека, чтобы сделать interop для нас, это более, чем стоило бы того. Я держал пари, что мы потратили тысячи долларов в человеко-часах пишущие и отлаживающие проблемы с interop от Delphi до .NET.
я взял бы ту библиотеку Managed-VLC для тест-драйва, чтобы видеть, как хорошо она работает. Если это соответствует своей рекламе, то это легко стоит 250$.
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()();
вот так?
Expression<Func<bool>> featureEnabledExpTree = () =>
IsFeatureEnabled("MV", "") &&
IsFeatureEnabled("GAS", "G") ||
!IsFEatureEnabled("GAS", "F");