我想知道的是如何將字符串轉換爲運算符。將字符串轉換爲運算符
我想能夠比較一個值與另一個,它是否爲真的條件是一個字符串。例如,字符串可能是'>'或'> ='或者其他我可以定義的'GREATER_THAN'。
是最好的方式只是一個案例或有更好的使用所有的C#的wizadry?
我想知道的是如何將字符串轉換爲運算符。將字符串轉換爲運算符
我想能夠比較一個值與另一個,它是否爲真的條件是一個字符串。例如,字符串可能是'>'或'> ='或者其他我可以定義的'GREATER_THAN'。
是最好的方式只是一個案例或有更好的使用所有的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);
不,你不能定義新運算符,但是如果你要定義你自己的一個新的業務對象的比較,那麼你可以在用戶操作符重載爲您模型。 找到該怎麼做,這裏
https://www.tutorialspoint.com/csharp/csharp_operator_overloading.htm
using System;
namespace OperatorOvlApplication
{
class Box
{
private double length; // Length of a box
private double breadth; // Breadth of a box
private double height; // Height of a box
public double getVolume()
{
return length * breadth * height;
}
public void setLength(double len)
{
length = len;
}
public void setBreadth(double bre)
{
breadth = bre;
}
public void setHeight(double hei)
{
height = hei;
}
// Overload + operator to add two Box objects.
public static Box operator+ (Box b, Box c)
{
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}
public static bool operator == (Box lhs, Box rhs)
{
bool status = false;
if (lhs.length == rhs.length && lhs.height == rhs.height && lhs.breadth == rhs.breadth)
{
status = true;
}
return status;
}
public static bool operator !=(Box lhs, Box rhs)
{
bool status = false;
if (lhs.length != rhs.length || lhs.height != rhs.height || lhs.breadth != rhs.breadth)
{
status = true;
}
return status;
}
public static bool operator <(Box lhs, Box rhs)
{
bool status = false;
if (lhs.length < rhs.length && lhs.height < rhs.height && lhs.breadth < rhs.breadth)
{
status = true;
}
return status;
}
public static bool operator >(Box lhs, Box rhs)
{
bool status = false;
if (lhs.length > rhs.length && lhs.height > rhs.height && lhs.breadth > rhs.breadth)
{
status = true;
}
return status;
}
public static bool operator <=(Box lhs, Box rhs)
{
bool status = false;
if (lhs.length <= rhs.length && lhs.height <= rhs.height && lhs.breadth <= rhs.breadth)
{
status = true;
}
return status;
}
public static bool operator >=(Box lhs, Box rhs)
{
bool status = false;
if (lhs.length >= rhs.length && lhs.height >= rhs.height && lhs.breadth >= rhs.breadth)
{
status = true;
}
return status;
}
public override string ToString()
{
return String.Format("({0}, {1}, {2})", length, breadth, height);
}
}
class Tester
{
static void Main(string[] args)
{
Box Box1 = new Box(); // Declare Box1 of type Box
Box Box2 = new Box(); // Declare Box2 of type Box
Box Box3 = new Box(); // Declare Box3 of type Box
Box Box4 = new Box();
double volume = 0.0; // Store the volume of a box here
// box 1 specification
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
// box 2 specification
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
//displaying the Boxes using the overloaded ToString():
Console.WriteLine("Box 1: {0}", Box1.ToString());
Console.WriteLine("Box 2: {0}", Box2.ToString());
// volume of box 1
volume = Box1.getVolume();
Console.WriteLine("Volume of Box1 : {0}", volume);
// volume of box 2
volume = Box2.getVolume();
Console.WriteLine("Volume of Box2 : {0}", volume);
// Add two object as follows:
Box3 = Box1 + Box2;
Console.WriteLine("Box 3: {0}", Box3.ToString());
// volume of box 3
volume = Box3.getVolume();
Console.WriteLine("Volume of Box3 : {0}", volume);
//comparing the boxes
if (Box1 > Box2)
Console.WriteLine("Box1 is greater than Box2");
else
Console.WriteLine("Box1 is greater than Box2");
if (Box1 < Box2)
Console.WriteLine("Box1 is less than Box2");
else
Console.WriteLine("Box1 is not less than Box2");
if (Box1 >= Box2)
Console.WriteLine("Box1 is greater or equal to Box2");
else
Console.WriteLine("Box1 is not greater or equal to Box2");
if (Box1 <= Box2)
Console.WriteLine("Box1 is less or equal to Box2");
else
Console.WriteLine("Box1 is not less or equal to Box2");
if (Box1 != Box2)
Console.WriteLine("Box1 is not equal to Box2");
else
Console.WriteLine("Box1 is not greater or equal to Box2");
Box4 = Box3;
if (Box3 == Box4)
Console.WriteLine("Box3 is equal to Box4");
else
Console.WriteLine("Box3 is not equal to Box4");
Console.ReadKey();
}
}
}
否則,你可以寫一個比較功能,將您的自定義操作員姓名和操作數
這是很多代碼通過挖掘,但不幸的是沒有任何這裏的操作符是OP所要求的字符串。 –
這與採購訂單的要求無關。 –
像這樣的東西(讓我們推廣解決方案):
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");
那麼你可以創建一個包含所有字符串別名和操作符的字典 - 那麼你的代碼就是一個oneliner – Mafii
你究竟想在這裏做什麼?爲什麼運營商是一個字符串?你有什麼嘗試? – Sayse
你能舉出一個可能的輸入例子嗎?你想要比較什麼值?數字,字符串? –