我试图比较两个忽略这个案例的字符,并想出了以下令人不安的代码试图玩现在着名的土耳其我:
char lowerCase = '?'; // U+0131 char upperCase = 'I'; // regular upper i // Displays True comparing the chars Trace.WriteLine(char.ToUpper(lowerCase, CultureInfo.CurrentCulture) == char.ToUpper(upperCase, CultureInfo.CurrentCulture)); // Displays False comparing the strings Trace.WriteLine(lowerCase.ToString().Equals(upperCase.ToString(), StringComparison.CurrentCultureIgnoreCase));
这两件事情正在使用我的文化(法语)并且似乎做同样的事情,但结果不是我所期望的(无论是True还是两者都是假的).
使用土耳其文化时:
Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR");
结果发生变化,两者都返回True.
我是否想念文化或字符/字符串比较?
编辑
读到这个问题,我现在明白两者是不同的.它与比较字符或字符串无关,而是处理自己的情况与否.我不明白的是他们为什么不同.是不是string.Equals与CurrentCultureIgnoreCase应该像我一样比较字符串的大写版本?我无法看到的场景背后是什么?