我正试图做这样的事情:
// some code...
string a="aa";
string b="bb";
// ...
if(b>a) // suppose to be true
{
// do somthing
}
但后来我得到了编译错误:
运营商'>'不能应用于'string'类型的操作数 '字符串'
那么最好的方法是什么?
答案 0 :(得分:5)
使用 CompareTo()
方法代替。
if(b.CompareTo(a) > 0)
比较两个指定的String对象并返回一个整数 表示它们在排序顺序中的相对位置。
这种方法;
- 如果b大于a或a为null,则返回大于零。
- 如果b小于a,则返回小于零。
- 如果b在排序顺序中与a具有相同的位置,则返回0.
检查此 DEMO
。
答案 1 :(得分:3)
if(string.Compare(a, b) > 0)
您可以使用==
& !=
但不是其他运营商,请改用string.Compare
答案 2 :(得分:1)
您可以使用CompareTo
。
if (b.CompareTo(a) > 0) { /*Operate*/ }
答案 3 :(得分:1)
无法像这样比较字符串,你应该使用String.Compare(),如MSDN上的这篇文章所示How to: Compare Strings (C# Programming Guide)
答案 4 :(得分:1)
您可以使用CompareTo
:
if(b.CompareTo(a) > 0)
答案 5 :(得分:1)
如果查看String class,您会看到没有为此类型定义运算符>
或<
,但是ComapreTo
方法就是这样,那就是go - 如其他答案中所述。
如果要在字符串类型上使用这些运算符,则必须实现自定义字符串类型并为其重载这些关系运算符。该课程可能如下所示:
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);
}
}