我正在尝试做这样的事情:
// some code...
string a="aa";
string b="bb";
// ...
if(b>a) // suppose to be true
{
// do somthing
}
但后来我得到编译错误:
运算符“>”不能应用于“字符串”和“字符串”类型的操作数。
那么最好的方法是什么?
使用CompareTo()
方法代替。
if(b.CompareTo(a) > 0)
比较两个指定的 String 对象并返回一个整数,指示它们在排序顺序中的相对位置。
这种方法;
- 如果 b 大于 a 或 a 为空,则返回大于零。
- 如果 b 小于 a,则返回小于零。
- 如果 b 在排序顺序中的位置与 a 相同,则返回 0。
检查这个DEMO
。
if(string.Compare(a, b) > 0)
您可以使用==
&!=
但不能使用其他运算符,请改用string.Compare
您可以使用CompareTo
.
if (b.CompareTo(a) > 0) { /*Operate*/ }
不能像那样比较字符串,您应该使用 String.Compare(),如 MSDN How to: Compare Strings (C# Programming Guide)上的这篇文章所示
您可以使用CompareTo
:
if(b.CompareTo(a) > 0)
如果您查看String 类,您会看到运算符>
或未<
为此类型定义,但ComapreTo
方法是,这就是要走的路 - 如其他答案所述。
如果要在字符串类型上使用这些运算符,则必须实现自定义字符串类型并为其重载这些关系运算符。该类可能如下所示:
public class MyString
{
string str;
public MyString(string str)
{
this.str = str;
}
public static implicit operator MyString(string str)
{
return new MyString(str);
}
public static bool operator < (MyString str1, MyString str2)
{
return (str1.str.CompareTo(str2.str) < 0);
}
public static bool operator >(MyString str1, MyString str2)
{
return (str1.str.CompareTo(str2.str) > 0);
}
public static bool operator ==(MyString str1, MyString str2)
{
return (str1.str.CompareTo(str2.str) == 0);
}
public static bool operator !=(MyString str1, MyString str2)
{
return (str1.str.CompareTo(str2.str) != 0);
}
// other methods and overloads
}
class Program
{
static void Main(string[] args)
{
MyString str1 = "abba";
MyString str2 = "abbb";
MyString str3 = "abba";
MyString str4 = "aabb";
Debug.Assert(str1 < str2);
Debug.Assert(str1 == str3);
Debug.Assert(str1 > str4);
}
}