有没有办法将字符串中的整个条件转换为布尔值

时间:2019-01-09 11:08:31

标签: c#

我需要一种方法来检查运行时中设置的条件。

我有提供自己创建的条件的类。

但是我不知道该怎么做。

至少我想要这样的东西:

int x = 1;
int y = 2;
int z = 3;

string s = "(x == 1 && y == 3) || z == 3";
bool b = bool.Parse(s);

我已经尝试在字符串中说明条件,然后将其转换为布尔值。

主要是我尝试使用此

string s = "true || false";

然后

bool b = false;
bool.TryParse(s, out b);

bool b = Convert.ToBoolean(s);

稍后将字符串中的“ true”或“ false”语句放入。 检查各个条件,并用true或false代替。

直到现在都没有工作。

编辑: 我正在开发一个游戏,并且有多个对象根据其各自的情况起作用。但是这些条件是在运行时设置的,它们的长度和复杂性在运行前是未知的。使用字符串是我的第一次尝试,因为我不知道该怎么做。 另外,我只了解基础知识,所以我不了解许多方法和库。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用DataTable利用旧技巧

  using System.Data;

  ... 

  private static bool Compute(string formula, int x, int y, int z) {
    using (var table = new DataTable()) {
      // variables of type int
      table.Columns.Add("x").DataType = typeof(int);
      table.Columns.Add("y").DataType = typeof(int);
      table.Columns.Add("z").DataType = typeof(int);

      table.Columns.Add("result").Expression = formula;

      table.Rows.Add(x, y, z);

      return Convert.ToBoolean(table.Rows[0]["result"]);
    }
  }

  ...

  // Please, not the syntax difference 
  Console.Write(Compute("(x = 1 and y = 3) or z = 3", 1, 2, 3));

答案 1 :(得分:0)

您可以使用CS-Script之类的C#脚本系统;这使您可以将C#作为脚本(本质上是字符串)执行。也有开源的C#编译器Roslyn,但是对于您的需求而言,它可能太高级了。