如何将字符串转换为布尔值并评估条件?
How to convert string to bool and evaluate the condition?
我必须将字符串转换为布尔值并评估字符串条件。
例如:
string condition = "8 > 9 || !8";
然后条件必须求值 return true;
if 字符串条件 = "!8";那么条件必须 return 为真。
建议我如何评估病情。
尝试使用.net提供的IValueConverter接口
你在哪里定义了 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 包。
我必须将字符串转换为布尔值并评估字符串条件。 例如:
string condition = "8 > 9 || !8";
然后条件必须求值 return true;
if 字符串条件 = "!8";那么条件必须 return 为真。
建议我如何评估病情。
尝试使用.net提供的IValueConverter接口
你在哪里定义了 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 包。