执行不区分区域性的字符串比较
默认情况下,String.Compare 方法执行区分区域性和区分大小写的比较。 此方法还包括多个重载,这些重载提供了一个 culture
参数和一个 comparisonType
参数,前者允许你指定要使用的区域性,后者允许你指定要使用的比较规则。 调用这些方法(而非调用默认重载)将消除与特定方法调用中使用的规则相关的任何歧义,并阐明某个特定比较是区分区域性的还是不区分区域性的。
注意
String.CompareTo 方法的两种重载都执行区分区域性且区分大小写的比较;你不能使用此方法来执行不区分区域性的比较。 为了使代码简单明了,建议你改用 String.Compare 方法。
对于区分区域性的操作,请将 StringComparison.CurrentCulture 或 StringComparison.CurrentCultureIgnoreCase 枚举值指定为 comparisonType
参数。 若要使用除当前区域性之外的指定区域性来执行区域性敏感型比较,请将表示相应区域性的 CultureInfo 对象指定为 culture
参数。
String.Compare 方法所支持的不区分区域性的字符串比较可以是语义的(基于固定区域性的排序约定)或非语义的(基于字符串中字符的序号值)。 大多数不区分区域性的字符串比较是非语义的。 对于这些比较,请将 StringComparison.Ordinal 或 StringComparison.OrdinalIgnoreCase 枚举值指定为 comparisonType
参数。 例如,如果安全决策(例如,用户名或密码比较)基于字符串比较的结果,则操作应不区分区域性且是非语义的,以确保结果不受特定区域性或语言的约定的影响。
如果你希望以一致方式处理来自多个区域性的语义相关字符串,请使用不区分区域性的语义字符串比较。 例如,如果你的应用程序在列表框中显示使用多个字符集的字词,则不管当前区域性如何,你可能都需要按相同的顺序来显示这些字词。 对于不区分区域性的语义比较,.NET 将定义一个基于英语的语义约定的固定区域性。 若要执行不区分区域性的语义比较,请将 StringComparison.InvariantCulture 或 StringComparison.InvariantCultureIgnoreCase 指定为 comparisonType
参数。
下面的示例将执行两个不区分区域性的非语义字符串比较。 第一个比较区分大小写,而第二个比较不区分大小写。
using System;
public class CompareSample
{
public static void Main()
{
string string1 = "file";
string string2 = "FILE";
int compareResult = 0;
compareResult = String.Compare(string1, string2,
StringComparison.Ordinal);
Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}",
StringComparison.Ordinal, string1, string2,
compareResult);
compareResult = String.Compare(string1, string2,
StringComparison.OrdinalIgnoreCase);
Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}",
StringComparison.OrdinalIgnoreCase, string1, string2,
compareResult);
}
}
// The example displays the following output:
// Ordinal comparison of 'file' and 'FILE': 32
// OrdinalIgnoreCase comparison of 'file' and 'FILE': 0
Public Class CompareSample
Public Shared Sub Main()
Dim string1 As String = "file"
Dim string2 As String = "FILE"
Dim compareResult As Integer
compareResult = String.Compare(string1, string2, _
StringComparison.Ordinal)
Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}",
StringComparison.Ordinal, string1, string2,
compareResult)
compareResult = String.Compare(string1, string2,
StringComparison.OrdinalIgnoreCase)
Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}",
StringComparison.OrdinalIgnoreCase, string1, string2,
compareResult)
End Sub
End Class
' The example displays the following output:
' Ordinal comparison of 'file' and 'FILE': 32
' OrdinalIgnoreCase comparison of 'file' and 'FILE': 0
可以下载排序权重表,这是一组文本文件,其中包含有关 Windows 操作系统排序和比较操作中所使用的字符权重的信息,也可以下载默认 Unicode 排序元素表,这是适用于 Linux 和 macOS 的排序权重表。