VS2008中C#比较字符串与MSDN标准结果相反
// Enter different values for string1 and string2 to// experiement with behavior of CompareTo
string string1 = "ABC";
string string2 = "abc";
int result = string1.CompareTo(string2);
if (result > 0)
{
System.Console.WriteLine("{0} is greater than {1}", string1, string2);
}
else if (result == 0)
{
System.Console.WriteLine("{0} is equal to {1}", string1, string2);
}
else if (result < 0)
{
System.Console.WriteLine("{0} is less than {1}", string1, string2);
}
// Outputs: ABC is less than abc
这是个VS2008 MSDN中的源代码,编译调试后显示“ABC is greater than abc” ,
但是msdn上明确指出 Outputs: ABC is less than abc
--------------------编程问答-------------------- 如果你确保没有看错MSDN的话,那可能就是MSDN写错了,毕竟MSDN也是人写的,写的时候张冠李戴也是有可能的。
比如以前做选择题,想好是选C的,结果却添了个D,这种可能也存在的。
--------------------编程问答-------------------- 回复 dalmeeme:
谢谢你的回复,msdn上明确指出小写字符的unicode值大于大写字母。
对于这个我是知道的。
也就是说 VS2008编译出来的结果是错误的,不知道有 遇到过这个错误么 --------------------编程问答--------------------
以对此问题回复:
http://topic.csdn.net/u/20121007/18/45b927bc-c1f8-4a8d-ad92-d8258f095388.html?17567
注意:为了自己和别人方便,以后不要重复发帖 --------------------编程问答-------------------- 因为CompareTo是有地域性和比较规则的。
msdn上明确指出小写字符的unicode值大于大写字母。这句话是正确的。
但是我们默认调用的CompareTo,并非比较的unicode值,而是作为字符来比较。使用字符排序规则。
这样以来小写字母自然在前了。
我们可以通过重写比较器,来指定地域性和排序规则就可以按照unicode值来比较了。
--------------------编程问答-------------------- 更多关于CompareOptions的内容可以参见MSDN:http://msdn.microsoft.com/zh-cn/library/system.globalization.compareoptions(v=vs.90).aspx
namespace TestCShar
{
class Program
{
static void Main(string[] args)
{
string a = "ABC";
string b = "abc";
int x = a.CompareTo(b);//x=1
//Ordinal即规定按照unicode来比较
MyStringComparer mc = new MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.Ordinal);
int y = mc.Compare(a, b);//y=-32
}
}
public class MyStringComparer : IComparer
{
private CompareInfo myComp;
private CompareOptions myOptions = CompareOptions.None;//默认按照字符串比较
public MyStringComparer()
{
myComp = CompareInfo.GetCompareInfo("en-US");
}
public MyStringComparer(CompareInfo cmpi, CompareOptions options)
{
this.myComp = cmpi;
this.myOptions = options;
}
public int Compare(object x, object y)
{
if (x == y) return 0;
if (x == null) return -1;
if (y == null) return 1;
String sa = x as String;
String sb = y as String;
if (sa != null && sb != null)
return myComp.Compare(sa, sb, myOptions);
throw new ArgumentException("x and y should be strings.");
}
}
}
补充:.NET技术 , C#