StringComparer Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt einen Zeichenfolgenvergleichsvorgang dar, der bestimmte Groß- und Kleinschreibungs- oder Ordinalvergleichsregeln verwendet.
public ref class StringComparer abstract : System::Collections::Generic::IComparer<System::String ^>, System::Collections::Generic::IEqualityComparer<System::String ^>, System::Collections::IComparer, System::Collections::IEqualityComparer
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
type StringComparer = class
interface IComparer<string>
interface IEqualityComparer<string>
interface IComparer
interface IEqualityComparer
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type StringComparer = class
interface IComparer
interface IEqualityComparer
interface IComparer<string>
interface IEqualityComparer<string>
Public MustInherit Class StringComparer
Implements IComparer, IComparer(Of String), IEqualityComparer, IEqualityComparer(Of String)
- Vererbung
-
StringComparer
- Attribute
- Implementiert
Beispiele
Im folgenden Beispiel werden die Eigenschaften und die Create Methode der StringComparer Klasse veranschaulicht. Das Beispiel veranschaulicht, wie unterschiedliche StringComparer Objekte drei Versionen des lateinischen Buchstabens I sortieren.
// 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
*/
// This example demonstrates members of the
// System.StringComparer class.
open System
open System.Globalization
open System.Threading
let display (lst: ResizeArray<string>) title =
printfn $"%s{title}"
for s in lst do
let c = s[0]
let codePoint = Convert.ToInt32 c
printfn $"0x{codePoint:x}"
printfn ""
// Create a list of string.
let list = ResizeArray()
// Get the tr-TR (Turkish-Turkey) culture.
let turkish = CultureInfo "tr-TR"
// Get the culture that is associated with the current thread.
let thisCulture = Thread.CurrentThread.CurrentCulture
// Get the standard StringComparers.
let invCmp = StringComparer.InvariantCulture
let invICCmp = StringComparer.InvariantCultureIgnoreCase
let currCmp = StringComparer.CurrentCulture
let currICCmp = StringComparer.CurrentCultureIgnoreCase
let ordCmp = StringComparer.Ordinal
let ordICCmp = StringComparer.OrdinalIgnoreCase
// Create a StringComparer that uses the Turkish culture and ignores case.
let turkICComp = StringComparer.Create(turkish, true)
// Define three strings consisting of different versions of the letter I.
// LATIN CAPITAL LETTER I (U+0049)
let capitalLetterI = "I"
// LATIN SMALL LETTER I (U+0069)
let smallLetterI = "i"
// LATIN SMALL LETTER DOTLESS I (U+0131)
let 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.
printfn $"The current culture is \"{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..."
(*
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
*)
' This code example demonstrates members of the System.StringComparer class.
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Threading
Class Sample
Public Shared Sub Main()
' Create a list of string.
Dim list As New List(Of String)
' Get the tr-TR (Turkish-Turkey) culture.
Dim turkish As New CultureInfo("tr-TR")
' Get the culture that is associated with the current thread.
Dim thisCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
' Get the standard StringComparers.
Dim invCmp As StringComparer = StringComparer.InvariantCulture
Dim invICCmp As StringComparer = StringComparer.InvariantCultureIgnoreCase
Dim currCmp As StringComparer = StringComparer.CurrentCulture
Dim currICCmp As StringComparer = StringComparer.CurrentCultureIgnoreCase
Dim ordCmp As StringComparer = StringComparer.Ordinal
Dim ordICCmp As StringComparer = StringComparer.OrdinalIgnoreCase
' Create a StringComparer that uses the Turkish culture and ignores case.
Dim turkICComp As StringComparer = StringComparer.Create(turkish, True)
' Define three strings consisting of different versions of the letter I.
' LATIN CAPITAL LETTER I (U+0049)
Dim capitalLetterI As String = "I"
' LATIN SMALL LETTER I (U+0069)
Dim smallLetterI As String = "i"
' LATIN SMALL LETTER DOTLESS I (U+0131)
Dim smallLetterDotlessI As String = "ı"
' 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...")
End Sub
Public Shared Sub Display(ByVal lst As List(Of String), ByVal title As String)
Dim c As Char
Dim s As String
Dim codePoint As Integer
Console.WriteLine(title)
For Each s In lst
c = s(0)
codePoint = Convert.ToInt32(c)
Console.WriteLine("0x{0:x}", codePoint)
Next s
Console.WriteLine()
End Sub
End Class
'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
'
Hinweise
Ein von der StringComparer Klasse abgeleitetes Objekt verkörpert zeichenfolgenbasierte Vergleichs-, Gleichheits- und Hashcodevorgänge, die sowohl die Fall- als auch kulturspezifischen Vergleichsregeln berücksichtigen. Mit der StringComparer Klasse können Sie einen typspezifischen Vergleich erstellen, um die Elemente in einer generischen Auflistung zu sortieren. Klassen wie Hashtable, Dictionary<TKey,TValue>, SortedList und SortedList<TKey,TValue> verwenden die StringComparer Klasse für Sortierzwecke.
Ein Vergleichsvorgang, der durch die StringComparer Klasse dargestellt wird, ist entweder als case-sensitive oder case-insensitive definiert und verwendet entweder Wortvergleichsregeln (kulturempfindlich) oder Ordinalvergleichsregeln (kulturunempfindlich). Weitere Informationen zu Wort- und Ordnungsvergleichsregeln finden Sie unter System.Globalization.CompareOptions.
Note
Sie können die Standardmäßige Unicode-Sortierelementtabelle, die neueste Version der Sortiergewichtstabelle, herunterladen. Die spezifische Version der Sortiergewichtstabelle hängt von der Version der auf dem System installierten internationalen Komponenten für Unicode-Bibliotheken ab. Informationen zu ICU-Versionen und den von ihnen implementierten Unicode-Versionen finden Sie unter "ICU herunterladen".
Implementierte Eigenschaften
Möglicherweise sind Sie verwirrt darüber, wie Sie die StringComparer Klasseneigenschaften aufgrund eines scheinbaren Widerspruchs verwenden. Die StringComparer Klasse wird deklariert abstract (MustInherit in Visual Basic), was bedeutet, dass ihre Member nur für ein Objekt einer von der StringComparer Klasse abgeleiteten Klasse aufgerufen werden können. Der Widerspruch besteht darin, dass jede Eigenschaft der StringComparer Klasse deklariert static wird (Shared in Visual Basic), was bedeutet, dass die Eigenschaft aufgerufen werden kann, ohne zuerst eine abgeleitete Klasse zu erstellen.
Sie können eine StringComparer Eigenschaft direkt aufrufen, da jede Eigenschaft tatsächlich eine Instanz einer anonymen Klasse zurückgibt, die von der StringComparer Klasse abgeleitet wird. Folglich ist StringComparerder Typ jedes Eigenschaftswerts , der die Basisklasse der anonymen Klasse ist, nicht der Typ der anonymen Klasse selbst. Jede StringComparer-Klasseneigenschaft gibt ein StringComparer-Objekt zurück, das vordefinierte Fall- und Vergleichsregeln unterstützt.
Konstruktoren
| Name | Beschreibung |
|---|---|
| StringComparer() |
Initialisiert eine neue Instanz der StringComparer-Klasse. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| CurrentCulture |
Ruft ein StringComparer Objekt ab, das einen Zeichenfolgenvergleich mit Groß-/Kleinschreibung mithilfe der Wortvergleichsregeln der aktuellen Kultur durchführt. |
| CurrentCultureIgnoreCase |
Ruft ein StringComparer Objekt ab, das Zeichenfolgenvergleiche mit Groß-/Kleinschreibung mithilfe der Wortvergleichsregeln der aktuellen Kultur durchführt. |
| InvariantCulture |
Ruft ein StringComparer Objekt ab, das mithilfe der Wortvergleichsregeln der invarianten Kultur einen Vergleich zwischen Groß- und Kleinschreibung durchführt. |
| InvariantCultureIgnoreCase |
Ruft ein StringComparer Objekt ab, das einen Zeichenfolgenvergleich mit Groß-/Kleinschreibung mithilfe der Wortvergleichsregeln der invarianten Kultur durchführt. |
| Ordinal |
Ruft ein StringComparer Objekt ab, das einen Vergleich zwischen Groß-/Kleinschreibungszeichenfolgen durchführt. |
| OrdinalIgnoreCase |
Ruft ein StringComparer Objekt ab, das einen Vergleich der Zeichenfolgen zwischen Groß- und Kleinschreibung durchführt. |
Methoden
| Name | Beschreibung |
|---|---|
| Compare(Object, Object) |
Wenn sie in einer abgeleiteten Klasse überschrieben werden, werden zwei Objekte verglichen und eine Angabe der relativen Sortierreihenfolge zurückgegeben. |
| Compare(String, String) |
Wenn sie in einer abgeleiteten Klasse überschrieben werden, werden zwei Zeichenfolgen verglichen und eine Angabe der relativen Sortierreihenfolge zurückgegeben. |
| Create(CultureInfo, Boolean) |
Erstellt ein StringComparer Objekt, das Zeichenfolgen gemäß den Regeln einer angegebenen Kultur vergleicht. |
| Create(CultureInfo, CompareOptions) |
Erstellt ein StringComparer Objekt, das Zeichenfolgen gemäß den Regeln einer angegebenen Kultur und Zeichenfolgenoptionen vergleicht. |
| Equals(Object, Object) |
Wenn sie in einer abgeleiteten Klasse überschrieben werden, gibt an, ob zwei Objekte gleich sind. |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| Equals(String, String) |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird angegeben, ob zwei Zeichenfolgen gleich sind. |
| FromComparison(StringComparison) |
Konvertiert die angegebene StringComparison Instanz in eine StringComparer Instanz. |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetHashCode(Object) |
Beim Überschreiben in einer abgeleiteten Klasse ruft den Hashcode für das angegebene Objekt ab. |
| GetHashCode(String) |
Beim Überschreiben in einer abgeleiteten Klasse ruft den Hashcode für die angegebene Zeichenfolge ab. |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| IsWellKnownCultureAwareComparer(IEqualityComparer<String>, CompareInfo, CompareOptions) |
Bestimmt, ob es sich bei dem angegebenen Wert IEqualityComparer<T> um einen bekannten kulturfähigen Zeichenfolgenvergleich handelt. |
| IsWellKnownOrdinalComparer(IEqualityComparer<String>, Boolean) |
Bestimmt, ob es sich bei dem angegebenen Wert IEqualityComparer<T> um einen bekannten Ordinalzeichenfolgen-Comparer handelt. |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| IComparer.Compare(Object, Object) |
Vergleicht zwei Objekte und gibt einen Wert zurück, der angibt, ob ein Objekt kleiner als, gleich oder größer als der andere ist. |
| IEqualityComparer.Equals(Object, Object) |
Bestimmt, ob die angegebenen Objekte gleich sind. |
| IEqualityComparer.GetHashCode(Object) |
Gibt einen Hashcode für das angegebene Objekt zurück. |