C# 如何将字符串转换为bool并计算条件?

C# 如何将字符串转换为bool并计算条件?,c#,.net,c#-4.0,C#,.net,C# 4.0,我必须将字符串转换为bool并计算字符串条件。 例如: string condition = "8 > 9 || !8"; 然后条件必须求值并返回true 如果字符串条件=“!8”;然后条件必须返回true 建议我如何评估该情况。尝试使用.net提供的IValueConverter接口 其中定义了两个方法Convert和ConvertBack 每个方法都接受object类型的参数并返回object类型 因此,您可以输入字符串并返回布尔值。 至于从字符串到表达式的转换,您可以签出此链接

我必须将字符串转换为bool并计算字符串条件。 例如:

string condition = "8 > 9 || !8";
然后条件必须求值并返回true

如果字符串条件=“!8”;然后条件必须返回true


建议我如何评估该情况。

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

其中定义了两个方法Convert和ConvertBack 每个方法都接受object类型的参数并返回object类型

因此,您可以输入字符串并返回布尔值。 至于从字符串到表达式的转换,您可以签出此链接
已清除所需代码。

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

其中定义了两个方法Convert和ConvertBack 每个方法都接受object类型的参数并返回object类型

因此,您可以输入字符串并返回布尔值。 至于从字符串到表达式的转换,您可以签出此链接
清除了所需的代码。

通常,如果要在运行时评估C代码,可以使用 NET编译器平台(Roslyn)通过 Nuget软件包

顺便说一句,我在stack overflow中找到了这个:

假设有效的C#表达式的唯一例外是treating,这里有一个针对您特定需求的解决方案!8为布尔真(特别禁止在任何其他字符前面或后面加“!8”)

专用异步任务ProcessExpression(字符串表达式)
{
var processedExpression=expression.Replace(“!8”,“true”);
return wait CSharpScript.EvaluateAsync(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}");
        });
Task.Run(异步()=>
{
var expresion=“8>9”;
var result=await ProcessExpression(expresion);
WriteLine($“{expresion}:{result}”);
expresion=“8<9”;
结果=等待处理表达式(表达式);
WriteLine($“{expresion}:{result}”);
expresion=“!8”;
结果=等待处理表达式(表达式);
WriteLine($“{expresion}:{result}”);
expresion=“8>9 | |!8”;
结果=等待处理表达式(表达式);
WriteLine($“{expresion}:{result}”);
expresion=“8>9&&!8”;
结果=等待处理表达式(表达式);
WriteLine($“{expresion}:{result}”);
});
我们得到的结果是:

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


请注意,此解决方案会带来性能损失,如果这是一场音乐会,您应该寻找其他选项,例如编写专用解析器或寻找第三方Nuget软件包。

通常,如果您希望在运行时评估C代码,您可以使用 NET编译器平台(Roslyn)通过 Nuget软件包

顺便说一句,我在stack overflow中找到了这个:

假设有效的C#表达式的唯一例外是treating,这里有一个针对您特定需求的解决方案!8为布尔真(特别禁止在任何其他字符前面或后面加“!8”)

专用异步任务ProcessExpression(字符串表达式)
{
var processedExpression=expression.Replace(“!8”,“true”);
return wait CSharpScript.EvaluateAsync(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}");
        });
Task.Run(异步()=>
{
var expresion=“8>9”;
var result=await ProcessExpression(expresion);
WriteLine($“{expresion}:{result}”);
expresion=“8<9”;
结果=等待处理表达式(表达式);
WriteLine($“{expresion}:{result}”);
expresion=“!8”;
结果=等待处理表达式(表达式);
WriteLine($“{expresion}:{result}”);
expresion=“8>9 | |!8”;
结果=等待处理表达式(表达式);
WriteLine($“{expresion}:{result}”);
expresion=“8>9&&!8”;
结果=等待处理表达式(表达式);
WriteLine($“{expresion}:{result}”);
});
我们得到的结果是:

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


请注意,此解决方案有性能损失,如果这是一场音乐会,您应该寻找其他选项,如编写专用解析器或寻找第三方Nuget软件包。

这取决于字符串结构的可靠性。您希望处理多少不同的操作员?。到目前为止你写了什么代码?到目前为止你尝试了什么?看起来你真正想要的是一个运行时表达式解析器和计算器;这并不是直接内置到.NET中的东西,但有一系列工具。或者,根据需要解析的表达式的复杂性,如果您习惯了AST求值之类的事情,那么自己编写它们通常相对容易;我不清楚什么是
!8
表示布尔值;这是否意味着C风格的“零为假,非零为真”方式?这取决于字符串结构的可靠性。您希望处理多少不同的操作员?。到目前为止你写了什么代码?到目前为止你尝试了什么?看起来你真正想要的是一个运行时表达式解析器和计算器;这并不是直接内置到.NET中的东西,但有一系列工具。或者,根据需要解析的表达式的复杂性,如果您习惯了AST求值之类的事情,那么自己编写它们通常相对容易;我不清楚什么是
!8
是指,作为一个boolea