C# 将字符串转换为运算符

C# 将字符串转换为运算符,c#,C#,我想知道的是如何将字符串转换为运算符 我希望能够比较一个值和另一个值,判断它是否为真的条件是字符串。例如,字符串可能是ne'>'或'>='或其他我可以定义为“大于”的东西 最好的方法只是一个案例,还是有更好的方法使用C#的所有wizadry?您可以使用以下简单方法: private bool Compare(string operator, int x, int y) { switch (operator) { case ">": return x >

我想知道的是如何将字符串转换为运算符

我希望能够比较一个值和另一个值,判断它是否为真的条件是字符串。例如,字符串可能是ne'>'或'>='或其他我可以定义为“大于”的东西


最好的方法只是一个案例,还是有更好的方法使用C#的所有wizadry?

您可以使用以下简单方法:

private bool Compare(string operator, int x, int y)
{
    switch (operator)
    {
        case ">": return x > y;
        case "<": return x < y;
        case "==": return x == y;
        ... etc.            
    }
}

bool result = Compare(">", 6, 8);
private bool Compare(字符串运算符,int x,int y)
{
开关(操作员)
{
案例“>”:返回x>y;
个案",6,8);;

否您不能定义新的运算符,但如果您想为自己的新业务对象定义比较,则可以为您的模型定义用户运算符重载。 在这里找到如何做到这一点

使用系统;
命名空间运算符虚拟应用程序
{
类框
{
private double length;//长方体的长度
私有双宽度;//盒子的宽度
私人双倍高度;//箱子的高度
公共双卷
{
返回长度*宽度*高度;
}
公共无效设置长度(双长度)
{
长度=长度;
}
公共空间后退(双bre)
{
宽度=bre;
}
公共空间设置高度(双高)
{
高度=高;
}
//重载+运算符以添加两个长方体对象。
公共静态框运算符+(框b、框c)
{
Box=新的Box();
box.length=b.length+c.length;
box.width=b.width+c.width;
box.height=b.height+c.height;
返回框;
}
公共静态布尔运算符==(框lhs,框rhs)
{
布尔状态=假;
如果(lhs.length==rhs.length&&lhs.height==rhs.height&&lhs.Width==rhs.Width)
{
状态=真;
}
返回状态;
}
公共静态布尔运算符!=(左框,右框)
{
布尔状态=假;
如果(左S.length!=右S.length | |左S.height!=右S.height | |左S.Width!=右S.Width)
{
状态=真;
}
返回状态;
}
公共静态bool操作员(左箱、右箱)
{
布尔状态=假;
如果(左侧长度>右侧长度和左侧高度>右侧高度和左侧宽度>右侧宽度)
{
状态=真;
}
返回状态;
}
公共静态布尔运算符=右宽度)
{
状态=真;
}
返回状态;
}
公共重写字符串ToString()
{
返回String.Format(({0},{1},{2})”,长度、宽度、高度);
}
}
类测试员
{
静态void Main(字符串[]参数)
{
Box Box1=new Box();//声明Box类型的Box1
Box Box2=new Box();//声明Box类型的Box2
Box Box3=new Box();//声明Box类型的Box3
Box Box4=新框();
double volume=0.0;//将盒子的体积存储在此处
//方框1规格
框1.设定长度(6.0);
框1.立根数(7.0);
框1.设置高度(5.0);
//方框2规格
框2.设定长度(12.0);
框2.立根数(13.0);
框2.设置高度(10.0);
//使用重载的ToString()显示框:
WriteLine(“框1:{0}”,Box1.ToString());
WriteLine(“框2:{0}”,Box2.ToString());
//方框1的体积
volume=Box1.getVolume();
WriteLine(“Box1的卷:{0}”,卷);
//方框2的体积
volume=Box2.getVolume();
WriteLine(“Box2的卷:{0}”,卷);
//添加两个对象,如下所示:
Box3=Box1+Box2;
WriteLine(“框3:{0}”,Box3.ToString());
//方框3的体积
volume=Box3.getVolume();
WriteLine(“Box3的卷:{0}”,卷);
//比较盒子
如果(框1>框2)
Console.WriteLine(“框1大于框2”);
其他的
Console.WriteLine(“框1大于框2”);
如果(框1<框2)
Console.WriteLine(“框1小于框2”);
其他的
Console.WriteLine(“框1不小于框2”);
如果(框1>=框2)
Console.WriteLine(“框1大于或等于框2”);
其他的
Console.WriteLine(“框1不大于或等于框2”);
如果(Box1类似于此(让我们概括一下解决方案):

private static bool MyCompare(字符串比较器,tx,ty),其中T:IComparable{
//我们不能将x.CompareTo(y)放在一起,因为x或y或两者都可以为null
intv=Comparer.Default.Compare(x,y);
//TODO:您可能需要严格的测试:if(comparer==“>”)返回v==0;else if()。。。
如果(比较器包含(“”)和&v>0)
返回true;
if(比较器包含('=')和&v==0)
返回true;
if(比较器包含(“!”)&&v!=0)
返回true;
返回false;
}
样本:

Console.WriteLine(MyCompare(">", 3, 8) ? "Y" : "N");
Console.WriteLine(MyCompare(">=", true, false) ? "Y" : "N");
Console.WriteLine(MyCompare("<>", "a", "b") ? "Y" : "N"); // Pascal syntax
Console.WriteLine(MyCompare("!=", "a", "b") ? "Y" : "N"); // C syntax
Console.WriteLine(MyCompare("==", 3.4, 7.8) ? "Y" : "N");
Console.WriteLine(MyCompare(“>”,3,8)?“Y”:“N”);
Console.WriteLine(MyCompare(“>=”,true,false)?“Y”:“N”);
Console.WriteLine(MyCompare(“,“a”,“b”)?“Y”:“N”);//Pascal语法
Console.WriteLine(MyCompare(“!=”,“a”,“b”)?“Y”:“N”);//C语法
Console.WriteLine(MyCompare(“==”,3.4,7.8)?“Y”:“N”);

你可以创建一个包含所有字符串别名和运算符的字典-那么你的代码就是一行你在这里实际要做什么?为什么运算符是字符串?你尝试过什么?你能举一个可能输入的例子吗?你想比较的值是什么?数字、字符串?可能的重复项很多de需要挖掘,但不幸的是,这里的操作符都不是OP要求的字符串。这和PO的请求无关。
private static bool MyCompare<T>(string comparer, T x, T y) where T: IComparable<T> {
  // we can't put x.CompareTo(y) since either x or y or both can be null 
  int v = Comparer<T>.Default.Compare(x, y);

  //TODO: you may want strict tests: if (comparer == ">") return v == 0; else if () ... 
  if (comparer.Contains('<') && v < 0)
    return true;

  if (comparer.Contains('>') && v > 0)
    return true;

  if (comparer.Contains('=') && v == 0)
    return true;

  if (comparer.Contains('!') && v != 0)
     return true;

  return false;
}
Console.WriteLine(MyCompare(">", 3, 8) ? "Y" : "N");
Console.WriteLine(MyCompare(">=", true, false) ? "Y" : "N");
Console.WriteLine(MyCompare("<>", "a", "b") ? "Y" : "N"); // Pascal syntax
Console.WriteLine(MyCompare("!=", "a", "b") ? "Y" : "N"); // C syntax
Console.WriteLine(MyCompare("==", 3.4, 7.8) ? "Y" : "N");