在C#中将字符串值转换为运算符

我试图找出一种动态构建条件的方法。

在例子中

var greaterThan = ">"; var a = 1; var b = 2; if(a Convert.ToOperator(greaterThan) b) {...} 

我读过这篇文章,但不太明白如何实现一些东西。 C#转换字符串以在逻辑条件下使用

Ano建议非常感谢

谢谢

我不会发布它,但认为它可能会有所帮助。 当然假设你在Jon的post中不需要高级通用逻辑。

 public static class Extension { public static Boolean Operator(this string logic, int x, int y) { switch (logic) { case ">": return x > y; case "<": return x < y; case "==": return x == y; default: throw new Exception("invalid logic"); } } } 

您可以使用这样的代码,其中greaterThan是具有所需逻辑/运算符的string

 if (greaterThan.Operator(a, b)) 

你真的不能这样做。 你最接近的将是:

 Func ConvertToBinaryConditionOperator(string op) 

然后:

 if (ConvertToBinaryConditionOperator(input)(a, b)) { } 

棘手的一点是ConvertToBinaryConditionOperator会做什么。 您可能想看看Marc Gravell在MiscUtil中实现generics运算符的工作 。 表达式树在这种情况下可能非常有用,尽管我相信Marc也有一种适用于.NET 2的工作方法。

所以在这种情况下你可能有类似的东西(使用MiscUtil )

 public static Func ConvertToBinaryConditionOperator(string op) { switch (op) { case "<": return Operator.LessThan; case ">": return Operator.GreaterThan; case "==": return Operator.Equal; case "<=": return Operator.LessThanOrEqual; // etc default: throw new ArgumentException("op"); } } 

更通用的方法是获取任何IComparable对象。

  public static bool Compare(string op, T left, T right) where T : IComparable { switch (op) { case "<": return left.CompareTo(right) < 0; case ">": return left.CompareTo(right) > 0; case "<=": return left.CompareTo(right) <= 0; case ">=": return left.CompareTo(right) >= 0; case "==": return left.Equals(right); case "!=": return !left.Equals(right); default: throw new ArgumentException("Invalid comparison operator: {0}", op); } }