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

时间:2010-05-21 09:06:19

标签: c# comparison char culture

对于this question中的答案,我必须比较两个字符。我认为正常的char.CompareTo()方法允许我指定 CultureInfo ,但事实并非如此。

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

4 个答案:

答案 0 :(得分:4)

字符没有启用文化比较,您必须将字符转换为字符串,以便您可以使用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
));

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

您是否尝试过String.Compare方法?

  

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

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

答案 3 :(得分:1)

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