簡體   English   中英

評估字符串表達式並轉換為布爾值?

[英]Evaluate string expression and convert to bool?

我想評估字符串表達式並將結果轉換為 bool。

例如

string expression = !((71 > 70) && (80 > 71)) || 72 < 71 ;

上面的表達式必須求值並返回 true。

誰能建議如何評估表達式並返回 bool 值?

我不相信有任何內置的表達式求解器可以用於這種表達式評估。 我會推薦Microsoft.CodeAnalysis.CSharp.Scripting進行評估。

string expression = "!((71 > 70) && (80 > 71)) || 72 < 71";
bool output = CSharpScript.EvaluateAsync<bool>(expression).Result;
// -> false

你的問題有問題

  • 表達式不會評估為真。 我不知道你為什么假設並要求它這樣做。 執行上述腳本后,得到的 bool 將為 false。

!((71 > 70) && (80 > 71)) || 72 < 71
!((true) && (true)) || false
!(true & true)
false

  • 你不能聲明一個沒有引號的字符串; string express = "within quotes"; . 上面 post 中的語句 ( string expression = !((71 > 70) && (80 > 71)) || 72 < 71 ; ) 不是有效的 C# 語句。

#dotnetfiddle 的測試片段

您可以使用 NCalc 包。 下面的代碼產生“假”

using System;
using NCalc;

public class Program
{
    public static void Main()
    {
        Expression e = new Expression("!((71 > 70) && (80 > 71)) || 72 < 71");
        bool v = (bool)e.Evaluate();
        Console.WriteLine(v.ToString());
    }
}

.Net 小提琴: https : //dotnetfiddle.net/02c5ww

如果您的要求是將 expressoin 輸出作為字符串“true”,則使用它,

string expression = Convert.ToString(!((71 > 70) && (80 > 71)) || 72 < 71);

如果要求是讓 bool “true”,則使用它,

bool expression = !((71 > 70) && (80 > 71)) || 72 < 71;

但是你的表達就像它會返回 false,要讓它成為 true 刪除“!” 如下,

string expression = Convert.ToString(((71 > 70) && (80 > 71)) || 72 < 71);            
bool bool_expression = ((71 > 70) && (80 > 71)) || 72 < 71;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM