如何将字符串转换为布尔值并评估条件?

How to convert string to bool and evaluate the condition?

我必须将字符串转换为布尔值并评估字符串条件。 例如:

string condition = "8 > 9 || !8";

然后条件必须求值 return true;

if 字符串条件 = "!8";那么条件必须 return 为真。

建议我如何评估病情。

尝试使用.net提供的IValueConverter接口

https://docs.microsoft.com/en-us/dotnet/api/system.windows.data.ivalueconverter?view=netframework-4.8

你在哪里定义了 2 个方法 Convert 和 ConvertBack 每个方法都接受一个对象类型的参数和 return 类型对象

所以你可以输入字符串和 return 布尔值。 至于从字符串到表达式的转换,你可以查看这个 link https://expressiontree-tutorial.net/knowledge-base/5029699/csharp-convert-string-expression-to-a-boolean-expression 清除了所需的代码。

一般来说,如果你想在运行时评估 C# 代码,你可以使用 .NET 编译器平台 (Roslyn) 通过 Microsoft.CodeAnalysis.CSharp.Scripting Nuget 包。

顺便说一句,我在堆栈溢出中发现了这个:如何动态计算 C# 表达式?

这是针对您的特定要求的解决方案,假设有效 C# 表达式的唯一例外是将 !8 视为布尔值 true(特别是禁止在“!8”之前或之后跟任何其他字符)。

private async Task<bool> ProcessExpression(string expression)
    {
        var processedExpression = expression.Replace("!8", "true");
        return await CSharpScript.EvaluateAsync<bool>(processedExpression);
    }

下面是上面的一些测试代码:

Task.Run(async () =>
        {
            var expresion = "8 > 9";
            var result = await ProcessExpression(expresion);
            Console.WriteLine($"{expresion} : {result}");

            expresion = "8 < 9";
            result = await ProcessExpression(expresion);
            Console.WriteLine($"{expresion} : {result}");

            expresion = "!8";
            result = await ProcessExpression(expresion);
            Console.WriteLine($"{expresion} : {result}");

            expresion = "8 > 9 || !8";
            result = await ProcessExpression(expresion);
            Console.WriteLine($"{expresion} : {result}");

            expresion = "8 > 9 && !8";
            result = await ProcessExpression(expresion);
            Console.WriteLine($"{expresion} : {result}");
        });

我们得到的输出是:

8 > 9:错误 8 < 9 :正确 !8:真 8 > 9 || !8:真 8 > 9 && !8 : 假

请注意,此解决方案会降低性能,如果这是一场音乐会,那么您应该寻找其他选项,例如编写专用解析器或寻找第 3 方 Nuget 包。