深入谈谈 C# 的 String.CompareTo
String.CompareTo 语法
public int CompareTo(
string strB
)
string strB
)
返回值
- 小于 0,实例小于参数 strB;
- 0,实例等于参数 strB;
- 大于 0,实例大于参数 strB,或者 strB 是 null 引用。
比较程序
并不是按字符串长度来比较的,而是:
- 比较两个字符串的第一个字符:相等则比较第二个,不相等则直接返回结果;
- 比较两个字符串的第二个字符:相等则比较第三个,不相等则直接返回结果;
- 比较两个字符串的第三个字符:相等则比较第四个,不相等则直接返回结果;
- ……
谁大谁小?
实例大还是 strB 大,这是受计算机区域设置影响的,对于我们的中国区域设置,默认为:
null<零长度字符串<0<1<2<...<9<a<b<c<...<z<...<阿<...<不<...<吃<...<这<...
需要说明数字、字母也是拆开一个一个的比较的,比如:字符串 "200" 是小于 "3" 的,因为 "2" 小于 "3"。
string a = "阿";
string b = "不";
string c = "吃";
if (a.CompareTo(b) > 0)
{
Response.Write(a + ">" + b + "<br>");
}
else if (a.CompareTo(b) < 0)
{
Response.Write(a + "<" + b + "<br>");
}
if (b.CompareTo(c) > 0)
{
Response.Write(b + ">" + c + "<br>");
}
else if (b.CompareTo(c) < 0)
{
Response.Write(b + "<" + c + "<br>");
}
string b = "不";
string c = "吃";
if (a.CompareTo(b) > 0)
{
Response.Write(a + ">" + b + "<br>");
}
else if (a.CompareTo(b) < 0)
{
Response.Write(a + "<" + b + "<br>");
}
if (b.CompareTo(c) > 0)
{
Response.Write(b + ">" + c + "<br>");
}
else if (b.CompareTo(c) < 0)
{
Response.Write(b + "<" + c + "<br>");
}
结果为:
阿<不
不<吃
不<吃
改一下区域设置
在“控制面板”中,打开“区域和语言选项”,在“区域选项”中单击“自定义”,在“排序”标签中选择“笔划”,一路确定。然后关闭 Visual Web Developer(假设我们是在 VWD 中进行的实验),再打开之,运行网站。
排序变成了:
阿>不
不<吃
不<吃
因为这是按笔划来的(“不”在这里笔划最少),不再是按拼音来的。我们改的这个区域设置只影响了中文,没有影响到数字和字母等。
所以
所以 CompareTo 很少用,不要用 CompareTo 来比较两个字符串是否相等,要用 Equals。