SortVersion Klasse

Definition

Stellt Informationen über die Unicode-Version bereit, die zum Vergleichen und Sortieren von Zeichenfolgen verwendet wird.Provides information about the version of Unicode used to compare and order strings.

public ref class SortVersion sealed : IEquatable<System::Globalization::SortVersion ^>
[System.Serializable]
public sealed class SortVersion : IEquatable<System.Globalization.SortVersion>
type SortVersion = class
    interface IEquatable<SortVersion>
Public NotInheritable Class SortVersion
Implements IEquatable(Of SortVersion)
Vererbung
SortVersion
Attribute
Implementiert

Beispiele

Das folgende Beispiel enthält einen Teil des Quellcodes einer Anwendung, die die SortVersion -Klasse verwendet, um sicherzustellen, dass die systemeigenen Namen von RegionInfo -Objekten entsprechend dem aktuellen System und der aktuellen Kultur geordnet sind.The following example contains a portion of the source code from an application that uses the SortVersion class to ensure that the native names of RegionInfo objects are ordered appropriately for the current system and current culture. Es verwendet die BinaryReader - BinaryWriter und-Objekte zum Speichern und Abrufen von sortierter Daten aus Regions.dat einer Datendatei mit dem Namen, statt jedes Mal, wenn die Anwendung ausgeführt wird, Daten abzurufen und zu ordnen.It uses the BinaryReader and BinaryWriter objects to store and retrieve ordered data from a data file named Regions.dat rather than retrieving and ordering data each time the application is run. Im Beispiel wird zuerst überprüft, ob die Datendatei vorhanden ist.The example first checks to determine whether the data file exists. Wenn dies nicht der Fall ist, werden die Daten erstellt und reindex das-Flag festgelegt, das angibt, dass die Daten erneut gespeichert und gespeichert werden müssen.If it does not, it creates the data and sets the reindex flag, which indicates that the data must be resorted and saved again. Andernfalls werden die Daten abgerufen und das gespeicherte SortVersion Objekt mit dem SortVersion -Objekt für die aktuelle Kultur auf dem aktuellen System verglichen.Otherwise, it retrieves the data and compares the saved SortVersion object with the SortVersion object for the current culture on the current system. Wenn Sie nicht gleich sind oder das reindex Flag zuvor festgelegt wurde, werden die Daten an die RegionInfo Daten übergegangen.If they are not equal, or if the reindex flag had been set previously, it resorts the RegionInfo data.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;

public class Example : IComparer
{
   private const string FILENAME = @".\Regions.dat";

   private struct Region
   {
      internal Region(string id, string name) 
      {
         this.Id = id;
         this.NativeName = name;
      }
      
      public string Id;
      public string NativeName;
      
      public override string ToString()
      {
         return this.NativeName;
      }
   }

   public static void Main()
   {
      bool reindex = false;
      
      Region[] regions;
      SortVersion ver = null;

      // If the data has not been saved, create it.
      if (! File.Exists(FILENAME)) { 
         regions = GenerateData();
         ver = CultureInfo.CurrentCulture.CompareInfo.Version;  
         reindex = true;
      }
      // Retrieve the existing data.
      else {
         regions = RestoreData(out ver);
      }

      // Determine whether the current ordering is valid; if not, reorder.
      if (reindex || ver != CultureInfo.CurrentCulture.CompareInfo.Version) { 
         Array.Sort(regions, new Example());      
         // Save newly reordered data.
         SaveData(regions);
      }
      
      // Continue with application...
   }

   private static Region[] GenerateData()
   {
      List<Region> regions = new List<Region>();

      foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures)) {
         if (culture.IsNeutralCulture | culture.Equals(CultureInfo.InvariantCulture))
            continue;
            
         RegionInfo region = new RegionInfo(culture.Name);
         regions.Add(new Region(region.Name, region.NativeName));
      }
      return regions.ToArray();
   }

   private static Region[] RestoreData(out SortVersion ver)
   {
      List<Region> regions = new List<Region>();
      
      BinaryReader rdr = new BinaryReader(File.Open(FILENAME, FileMode.Open));
      
      int sortVer = rdr.ReadInt32();
      Guid sortId = Guid.Parse(rdr.ReadString());
      ver = new SortVersion(sortVer, sortId);
      
      string id, name;
      while (rdr.PeekChar() != -1) {
         id = rdr.ReadString();
         name = rdr.ReadString();
         regions.Add(new Region(id, name));      
      }
      return regions.ToArray();
   }

   private static void SaveData(Region[] regions)
   {
      SortVersion ver = CultureInfo.CurrentCulture.CompareInfo.Version;

      BinaryWriter wrtr = new BinaryWriter(File.Open(FILENAME, FileMode.Create));
      wrtr.Write(ver.FullVersion); 
      wrtr.Write(ver.SortId.ToString()); 
      
      foreach (var region in regions) {
         wrtr.Write(region.Id);
         wrtr.Write(region.NativeName);
      }
      wrtr.Close();
   }

   public int Compare(object o1, object o2)
   {
        // Assume that all casts succeed.
        Region r1 = (Region) o1;
        Region r2 = (Region) o2;
        
        return String.Compare(r1.NativeName, r2.NativeName, 
                              StringComparison.CurrentCulture);        
   }
}
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.IO
Imports System.Text

Public Class Example : Implements IComparer
   Private Const FILENAME As String = ".\Regions.dat"
   
   Private Structure Region
      Friend Sub New(id As String, name As String)
         Me.Id = id
         Me.NativeName = name
      End Sub
      
      Dim Id As String
      Dim NativeName As String
      
      Public Overrides Function ToString() As String
         Return Me.NativeName
      End Function
   End Structure
   
   Public Shared Sub Main()
      Dim reindex As Boolean = False
      
      Dim regions() As Region
      Dim ver As SortVersion = Nothing

      ' If the data has not been saved, create it.
      If Not File.Exists(FILENAME) Then 
         regions = GenerateData()
         ver = CultureInfo.CurrentCulture.CompareInfo.Version  
         reindex = True
      ' Retrieve the existing data.
      Else
         regions = RestoreData(ver)
      End If

      ' Determine whether the current ordering is valid; if not, reorder.
      If reindex OrElse ver <> CultureInfo.CurrentCulture.CompareInfo.Version Then 
         Array.Sort(regions, New Example())      
         ' Save newly reordered data.
         SaveData(regions)
      End If
      
      ' Continue with application...
   End Sub

   Private Shared Function GenerateData() As Region()
      Dim regions As New List(Of Region)()

      For Each culture In CultureInfo.GetCultures(CultureTypes.AllCultures)
         If culture.IsNeutralCulture Or culture.Equals(CultureInfo.InvariantCulture) Then Continue For
            
         Dim region As New RegionInfo(culture.Name)
         regions.Add(New Region(region.Name, region.NativeName))
      Next
      Return regions.ToArray()
   End Function
   
   Private Shared Function RestoreData(ByRef ver As SortVersion) As Region()
      Dim regions As New List(Of Region)
      
      Dim rdr As New BinaryReader(File.Open(FILENAME, FileMode.Open))
      
      Dim sortVer As Integer = rdr.ReadInt32
      Dim sortId As Guid = Guid.Parse(rdr.ReadString())
      ver = New SortVersion(sortVer, sortId)
      
      Dim id As String, name As String
      Do While rdr.PeekChar <> -1
         id = rdr.ReadString()
         name = rdr.ReadString()
         regions.Add(New Region(id, name))      
      Loop
      Return regions.ToArray()
   End Function
   
   Private Shared Sub SaveData(regions As Region())
      Dim ver As SortVersion = CultureInfo.CurrentCulture.CompareInfo.Version

      Dim wrtr As New BinaryWriter(File.Open(FILENAME, FileMode.Create))
      wrtr.Write(ver.FullVersion) 
      wrtr.Write(ver.SortId.ToString()) 
      
      For Each region In regions
         wrtr.Write(region.Id)
         wrtr.Write(region.NativeName)
      Next
      wrtr.Close()
   End Sub

   Private Function SortByNativeName(o1 As Object, o2 As Object) As Integer _
           Implements IComparer.Compare
        ' Assume that all conversions succeed.
        Dim r1 As Region = CType(o1, Region)
        Dim r2 As Region = CType(o2, Region)
        
        Return String.Compare(r1.NativeName, r2.NativeName, 
                              StringComparison.CurrentCulture)         
   End Function
End Class

Hinweise

Sortieren und Zeichen folgen Vergleich in der .NET FrameworkSorting and string comparison in the .NET Framework

Vom bis zum .NET Framework 4.NET Framework 4enthält jede Version von The.NET Framework Tabellen, die Sortierungs Gewichtungen und Daten für die Zeichen folgen Normalisierung enthalten und auf einer bestimmten Unicode-Version basieren. .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1From the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1 through the .NET Framework 4.NET Framework 4, each version of the.NET Framework has included tables that contain sort weights and data on string normalization and that are based on a particular version of Unicode. .NET Framework 4.5.NET Framework 4.5In ist das vorhanden sein dieser Tabellen vom Betriebssystem abhängig:In the .NET Framework 4.5.NET Framework 4.5, the presence of these tables depends on the operating system:

  • Unter Windows 7Windows 7 und früheren Versionen des Windows-Betriebssystems werden die Tabellen weiterhin zum Vergleichen und Anordnen von Zeichen folgen verwendet.On Windows 7Windows 7 and previous versions of the Windows operating system, the tables continue to be used for comparing and ordering strings.

  • In Windows 8Windows 8delegiert der .NET Framework Zeichen folgen Vergleich und Bestellvorgänge an das Betriebssystem.On Windows 8Windows 8, the .NET Framework delegates string comparison and ordering operations to the operating system.

Folglich kann das Ergebnis eines Zeichen folgen Vergleichs nicht nur von der .NET Framework Version abhängen, sondern auch von der Betriebssystemversion, wie in der folgenden Tabelle gezeigt.Consequently, the result of a string comparison can depend not only on the .NET Framework version, but also on the operating system version, as the following table shows. Beachten Sie, dass diese Liste der unterstützten Unicode-Versionen lediglich für den Zeichenvergleich und die Sortierung gilt. Sie gilt nicht für die kategorische Klassifizierung von Unicode-Zeichen.Note that this list of supported Unicode versions applies to character comparison and sorting only; it does not apply to classification of Unicode characters by category.

.NET Framework-Version.NET Framework version BetriebssystemOperating system Unicode-VersionUnicode version
.NET Framework 4.NET Framework 4 Alle BetriebssystemeAll operating systems Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5und spätere Versionen des .NET Frameworkand later versions of the .NET Framework Windows 7Windows 7 Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5und spätere Versionen des .NET Frameworkand later versions of the .NET Framework Windows 8Windows 8und spätere Versionen des Windows-Betriebssystemsand later Windows operating system versions Unicode 6.0Unicode 6.0

Windows 8Windows 8Da die in Zeichen folgen Vergleich und-Reihenfolge verwendete Unicode-Version von der Version des Betriebssystems abhängig ist, können sich die Ergebnisse des Zeichen folgen Vergleichs auch bei Anwendungen unterscheiden, die auf einer bestimmten Version des .NET Framework ausgeführt werden.On Windows 8Windows 8, because the version of Unicode used in string comparison and ordering depends on the version of the operating system, the results of string comparison may differ even for applications that run on a specific version of the .NET Framework.

Sortieren und Zeichen folgen Vergleich in .net CoreSorting and string comparison in .NET Core

Beim Durchführen von Zeichen folgen vergleichen basieren alle Versionen von .net Core auf dem zugrunde liegenden Betriebssystem.All versions of .NET Core rely on the underlying operating system when performing string comparisons. Daher hängt die Ergebnisse eines Zeichen folgen Vergleichs oder die Reihenfolge, in der Zeichen folgen sortiert werden, von der Unicode-Version ab, die vom Betriebssystem beim Durchführen des Vergleichs verwendet wird.Therefore, the results of a string comparison or the order in which strings are sorted depends on the version of Unicode used by the operating system when performing the comparison. Unter Linux und macOS stellen internationale Komponenten für Unicode -Bibliotheken die Implementierung für Vergleichs-und Sortierungs-APIs bereit.On Linux and macOS, International Components for Unicode libraries provide the implementation for comparison and sorting APIs.

Verwenden der sortversion-KlasseUsing the SortVersion class

Die SortVersion -Klasse stellt Informationen über die Unicode-Version bereit, die von .net für den Zeichen folgen Vergleich und die ReihenfolgeThe SortVersion class provides information about the Unicode version used by .NET for string comparison and ordering. Es ermöglicht Entwicklern das Schreiben von Anwendungen, die Änderungen in der Unicode-Version erkennen und erfolgreich verarbeiten können, die zum Vergleichen und Sortieren der Zeichen folgen einer Anwendung verwendet wird.It enables developers to write applications that can detect and successfully handle changes in the version of Unicode that is used to compare and sort an application's strings.

Sie können ein SortVersion -Objekt auf zweierlei Weise instanziieren:You can instantiate a SortVersion object in two ways:

  • Durch Aufrufen des SortVersion -Konstruktors, der ein neues SortVersion -Objekt auf Grundlage einer Versionsnummer und Sortier-ID instanziiert.By calling the SortVersion constructor, which instantiates a new SortVersion object based on a version number and sort ID. Dieser Konstruktor ist am nützlichsten, wenn ein SortVersion -Objekt aus gespeicherten Daten neu erstellt wird.This constructor is most useful when recreating a SortVersion object from saved data.

  • Durch Abrufen des Werts der CompareInfo.Version -Eigenschaft.By retrieving the value of the CompareInfo.Version property. Diese Eigenschaft enthält Informationen über die Unicode-Version, die von der .NET-Implementierung verwendet wird, auf der die Anwendung ausgeführt wird.This property provides information about the Unicode version used by the .NET implementation on which the application is running.

Die SortVersion -Klasse verfügt über zwei FullVersion Eigenschaften SortId, und, die die Unicode-Version und die spezifische Kultur angeben, die für den Zeichen folgen Vergleich verwendet wird.The SortVersion class has two properties, FullVersion and SortId, that indicate the Unicode version and the specific culture used for string comparison. Die FullVersion -Eigenschaft ist ein beliebiger numerischer Wert, der die für den Zeichen folgen Vergleich verwendete SortId Unicode-Version wider Guid spiegelt, und die-Eigenschaft ist eine beliebige, die die Kultur widerspiegelt, deren Konventionen für den Zeichen folgen VergleichThe FullVersion property is an arbitrary numeric value that reflects the Unicode version used for string comparison, and the SortId property is an arbitrary Guid that reflects the culture whose conventions are used for string comparison. Die Werte dieser beiden Eigenschaften sind nur wichtig, wenn Sie SortVersion zwei-Objekte mit der Equals -Methode, dem Equality -Operator oder dem Inequality -Operator vergleichen.The values of these two properties are important only when you compare two SortVersion objects by using the Equals method, the Equality operator, or the Inequality operator.

In der Regel verwenden SortVersion Sie ein-Objekt, wenn Sie eine Form von Kultur abhängigen, geordneten Zeichen folgen Daten speichern oder abrufen, z. b. Indizes oder Literalzeichenfolgen.You typically use a SortVersion object when saving or retrieving some form of culture-sensitive, ordered string data, such as indexes or the literal strings themselves. Gehen Sie dazu folgendermaßen vor:This requires the following steps:

  1. Wenn die geordneten Zeichen folgen Daten gespeichert werden, FullVersion werden SortId auch die-und-Eigenschaftswerte gespeichert.When the ordered string data is saved, the FullVersion and SortId property values are also saved.

  2. Wenn die geordneten Zeichen folgen Daten abgerufen werden, können Sie das SortVersion Objekt zum Anordnen der Zeichen folgen neu erstellen SortVersion , indem Sie den-Konstruktor aufrufen.When the ordered string data is retrieved, you can recreate the SortVersion object used for ordering the strings by calling the SortVersion constructor.

  3. Dieses neu instanziierte SortVersion Objekt wird mit einem SortVersion -Objekt verglichen, das die Kultur widerspiegelt, deren Konventionen zum Sortieren der Zeichen folgen Daten verwendet werden.This newly instantiated SortVersion object is compared with a SortVersion object that reflects the culture whose conventions are used to order the string data.

  4. Wenn die beiden SortVersion Objekte nicht gleich sind, müssen die Zeichen folgen Daten neu angeordnet werden.If the two SortVersion objects are not equal, the string data must be reordered.

Dies wird im Beispiel veranschaulicht.The example provides an illustration.

Konstruktoren

SortVersion(Int32, Guid)

Erstellt eine neue Instanz der SortVersion-Klasse.Creates a new instance of the SortVersion class.

Eigenschaften

FullVersion

Ruft die vollständige Versionsnummer des SortVersion-Objekts ab.Gets the full version number of the SortVersion object.

SortId

Ruft einen globalen eindeutigen Bezeichner für dieses SortVersion-Objekt ab.Gets a globally unique identifier for this SortVersion object.

Methoden

Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese SortVersion-Instanz gleich einem angegebenen Objekt ist.Returns a value that indicates whether this SortVersion instance is equal to a specified object.

Equals(SortVersion)

Gibt einen Wert zurück, der angibt, ob diese SortVersion-Instanz gleich einem angegebenen SortVersion-Objekt ist.Returns a value that indicates whether this SortVersion instance is equal to a specified SortVersion object.

GetHashCode()

Gibt einen Hashcode für diese Instanz zurück.Returns a hash code for this instance.

GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Geerbt von Object)

Operatoren

Equality(SortVersion, SortVersion)

Gibt an, ob zwei SortVersion-Instanzen gleich sind.Indicates whether two SortVersion instances are equal.

Inequality(SortVersion, SortVersion)

Gibt an, ob zwei SortVersion-Instanzen ungleich sind.Indicates whether two SortVersion instances are not equal.

Gilt für:

Siehe auch