StringComparer 类

定义

表示一种字符串比较操作,该操作使用特定的大小写以及基于区域性的比较规则或序号比较规则。

public abstract class StringComparer : System.Collections.Generic.IComparer<string>, System.Collections.Generic.IEqualityComparer<string>, System.Collections.IComparer, System.Collections.IEqualityComparer
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public abstract class StringComparer : System.Collections.Generic.IComparer<string>, System.Collections.Generic.IEqualityComparer<string>, System.Collections.IComparer, System.Collections.IEqualityComparer
继承
StringComparer
属性
实现

示例

以下示例演示 类的属性和 Create 方法 StringComparer 。 该示例演示了不同 StringComparer 对象如何对拉丁文字母 I 的三个版本进行排序。

// This example demonstrates members of the 
// System.StringComparer class.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;

class Sample 
{
    public static void Main() 
    {
        // Create a list of string.
        List<string> list = new List<string>();

        // Get the tr-TR (Turkish-Turkey) culture.
        CultureInfo turkish = new CultureInfo("tr-TR");

        // Get the culture that is associated with the current thread.
        CultureInfo thisCulture = Thread.CurrentThread.CurrentCulture;

        // Get the standard StringComparers.
        StringComparer invCmp =   StringComparer.InvariantCulture;
        StringComparer invICCmp = StringComparer.InvariantCultureIgnoreCase;
        StringComparer currCmp = StringComparer.CurrentCulture;
        StringComparer currICCmp = StringComparer.CurrentCultureIgnoreCase;
        StringComparer ordCmp = StringComparer.Ordinal;
        StringComparer ordICCmp = StringComparer.OrdinalIgnoreCase;

        // Create a StringComparer that uses the Turkish culture and ignores case.
        StringComparer turkICComp = StringComparer.Create(turkish, true);

        // Define three strings consisting of different versions of the letter I.
        // LATIN CAPITAL LETTER I (U+0049)
        string capitalLetterI = "I";  

        // LATIN SMALL LETTER I (U+0069)
        string smallLetterI   = "i";

        // LATIN SMALL LETTER DOTLESS I (U+0131)
        string smallLetterDotlessI = "\u0131";

        // Add the three strings to the list.
        list.Add(capitalLetterI);
        list.Add(smallLetterI);
        list.Add(smallLetterDotlessI);

        // Display the original list order.
        Display(list, "The original order of the list entries...");

        // Sort the list using the invariant culture.
        list.Sort(invCmp);
        Display(list, "Invariant culture...");
        list.Sort(invICCmp);
        Display(list, "Invariant culture, ignore case...");

        // Sort the list using the current culture.
        Console.WriteLine("The current culture is \"{0}\".", thisCulture.Name);
        list.Sort(currCmp);
        Display(list, "Current culture...");
        list.Sort(currICCmp);
        Display(list, "Current culture, ignore case...");

        // Sort the list using the ordinal value of the character code points.
        list.Sort(ordCmp);
        Display(list, "Ordinal...");
        list.Sort(ordICCmp);
        Display(list, "Ordinal, ignore case...");

        // Sort the list using the Turkish culture, which treats LATIN SMALL LETTER 
        // DOTLESS I differently than LATIN SMALL LETTER I.
        list.Sort(turkICComp);
        Display(list, "Turkish culture, ignore case...");
    }

    public static void Display(List<string> lst, string title)
    {
        Char c;
        int  codePoint;
        Console.WriteLine(title);
        foreach (string s in lst)
        {
            c = s[0];
            codePoint = Convert.ToInt32(c);
            Console.WriteLine("0x{0:x}", codePoint); 
        }
        Console.WriteLine();
    }
}
/*
This code example produces the following results:

The original order of the list entries...
0x49
0x69
0x131

Invariant culture...
0x69
0x49
0x131

Invariant culture, ignore case...
0x49
0x69
0x131

The current culture is "en-US".
Current culture...
0x69
0x49
0x131

Current culture, ignore case...
0x49
0x69
0x131

Ordinal...
0x49
0x69
0x131

Ordinal, ignore case...
0x69
0x49
0x131

Turkish culture, ignore case...
0x131
0x49
0x69

*/

注解

有关此 API 的详细信息,请参阅 StringComparer 的补充 API 说明

构造函数

StringComparer()

初始化 StringComparer 类的新实例。

属性

CurrentCulture

获取一个 StringComparer 对象,该对象使用当前区域性的单词比较规则执行区分大小写的字符串比较。

CurrentCultureIgnoreCase

获取一个 StringComparer 对象,该对象使用当前区域性的单词比较规则执行不区分大小写的字符串比较。

InvariantCulture

获取一个 StringComparer 对象,该对象使用固定区域性的单词比较规则执行区分大小写的字符串比较。

InvariantCultureIgnoreCase

获取一个 StringComparer 对象,该对象使用固定区域性的单词比较规则执行不区分大小写的字符串比较。

Ordinal

获取 StringComparer 对象,该对象执行区分大小写的序号字符串比较。

OrdinalIgnoreCase

获取 StringComparer 对象,该对象执行不区分大小写的序号字符串比较。

方法

Compare(Object, Object)

当在派生类中重写时,将比较两个对象并返回其相对排序顺序的指示。

Compare(String, String)

当在派生类中重写时,将比较两个字符串并返回其相对排序顺序的指示。

Create(CultureInfo, Boolean)

创建 StringComparer 对象,该对象根据指定区域性的规则对字符串进行比较。

Create(CultureInfo, CompareOptions)

创建一个 StringComparer 对象,该对象根据指定的区域性和字符串选项的规则对字符串进行比较。

Equals(Object, Object)

当在派生类中重写时,指示两个对象是否相等。

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
Equals(String, String)

当在派生类中重写时,指示两个字符串是否相等。

FromComparison(StringComparison)

将指定的 StringComparison 实例转换为 StringComparer 实例。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetHashCode(Object)

当在派生类中重写时,将获取指定对象的哈希代码。

GetHashCode(String)

当在派生类中重写时,将获取指定字符串的哈希代码。

GetType()

获取当前实例的 Type

(继承自 Object)
IsWellKnownCultureAwareComparer(IEqualityComparer<String>, CompareInfo, CompareOptions)

确定指定的 IEqualityComparer<T> 是否是已知的区域性感知字符串比较器。

IsWellKnownOrdinalComparer(IEqualityComparer<String>, Boolean)

确定指定的 IEqualityComparer<T> 是否是已知的序号字符串比较器。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回表示当前对象的字符串。

(继承自 Object)

显式接口实现

IComparer.Compare(Object, Object)

比较两个对象并返回一个值,该值指示一个对象小于、等于还是大于另一个对象。

IEqualityComparer.Equals(Object, Object)

确定指定的对象是否相等。

IEqualityComparer.GetHashCode(Object)

返回指定对象的哈希代码。

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

另请参阅