比较法国字符Î的问题

Bry*_*yan 8 c# string culture compare

当比较"Île"和"Ile"时,C#并不认为它们是相同的.

    string.Equals("Île", "Ile", StringComparison.InvariantCultureIgnoreCase)
Run Code Online (Sandbox Code Playgroud)

对于我遇到的所有其他重音字符,比较工作正常.

我应该使用另一种比较功能吗?

dri*_*iis 6

您指定使用Invariant culture的比较规则比较字符串.显然,在不变的文化中,两个字符串被认为是不相等的.

您可以使用String.Compare以特定于文化的方式比较它们,并提供要比较字符串的文化:

if(String.Compare("Île", "Ile", new CultureInfo("fr-FR"), CompareOptions.None)==0)
Run Code Online (Sandbox Code Playgroud)

请注意,在法国文化中,这些字符串也被视为不同.我列举了一个示例来表明,它是定义排序规则的文化.您可能能够找到符合您要求的文化,或者使用所需的比较规则构建自定义文化,但它可能不是您想要的.

有关标准化字符串以便没有重音符号的好例子,请查看此问题.规范化字符串后,您将能够比较它们并将它们视为相等.这可能是实现您的要求的最简单方法.

编辑

在InvariantCulture中不仅仅是I字符具有此行为,此语句也返回false:

String.Equals("Ilê", "Ile", StringComparison.InvariantCultureIgnoreCase)
Run Code Online (Sandbox Code Playgroud)

框架是正确的 - 在大多数文化中,这些角色实际上是不同的(具有不同的含义),因此它们不应被视为相同.