C# 如何比较角色(尊重文化)

C# 如何比较角色(尊重文化),c#,comparison,char,culture,C#,Comparison,Char,Culture,对于我在中的答案,我必须比较两个字符。我认为常规方法允许我指定CultureInfo,但事实并非如此 所以我的问题是:如何比较两个字符并指定一个CultureInfo进行比较?我认为在比较C#中的字符时CultureInfo并不重要。char已经是Unicode字符,所以两个字符可以很容易地与Hut CultureInfo进行比较。您尝试过这种方法吗 比较使用当前区域性来获取特定于区域性的信息,例如大小写规则和单个字符的字母顺序。例如,区域性可以指定将某些字符组合视为单个字符,或者以特定方式比较

对于我在中的答案,我必须比较两个字符。我认为常规方法允许我指定CultureInfo,但事实并非如此


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

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

您尝试过这种方法吗

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


没有启用区域性的字符比较,您必须将字符转换为字符串,以便可以使用例如
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
));

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


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

我认为这个问题的目标是在某种文化中,具有相同含义的不同unicode字符具有平等性。例如,(当忽略案例时)我和我在英国是一样的,但在土耳其不是。我认为他在寻找自然语言,这是一种自然语言。@mafurtct,@this:是的,我很好奇在某种文化中(例如在土耳其)有哪些可能比较字符。当我比较chars和铸造到字符串的两个chars时,似乎有一个区别。
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
));