如何比较人物(尊重文化)

对于我在这个问题中的答案,我必须比较两个字符。 我认为普通的char.CompareTo()方法允许我指定CultureInfo ,但事实并非如此。

所以我的问题是: 如何比较两个字符并指定CultureInfo进行比较?

比较字符和字符串之间确实存在差异。 让我试着解释基本问题,这很简单:一个字符总是代表一个unicode点。 比较字符总是比较代码点而不考虑它们的相同含义。

如果要比较字符的相同含义,则需要创建一个字符串并使用其中提供的比较方法。 这些包括对不同文化的支持。 请参阅Guffa关于如何做到这一点的答案。

没有文化启用的字符比较,您必须将字符转换为字符串,以便您可以使用例如String.Compare(string, string, CultureInfo, CompareOptions)方法。

例:

 char a = 'å'; char b = 'ä'; // outputs -1: Console.WriteLine(String.Compare( a.ToString(), b.ToString(), CultureInfo.GetCultureInfo("sv-SE"), CompareOptions.IgnoreCase )); // outputs 1: Console.WriteLine(String.Compare( a.ToString(), b.ToString(), CultureInfo.GetCultureInfo("en-GB"), CompareOptions.IgnoreCase )); 

你尝试过String.Compare方法吗?

比较使用当前文化来获取特定于文化的信息,例如套管规则和单个字符的字母顺序。 例如,文化可以指定某些字符组合被视为单个字符,或者以特定方式比较大写和小写字符,或者字符的排序顺序取决于其前面或后面的字符。

 String.Compare(str1, str2, false, new CultureInfo("en-US")) 

我不认为cultureInfo在比较C#中的字符时很重要。 char已经是一个Unicode字符,因此可以很容易地将两个字符与CultureInfo进行比较。