SortVersion SortVersion SortVersion SortVersion Class

Définition

Fournit des informations sur la version Unicode utilisée pour comparer et trier des chaînes.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)
Héritage
SortVersionSortVersionSortVersionSortVersion
Attributs
Implémente

Exemples

L’exemple suivant contient une partie du code source à partir d’une application qui utilise le SortVersion classe pour vous assurer que le nom natif des RegionInfo les objets sont ordonnés de manière appropriée pour le système actuel et la culture actuelle.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. Il utilise le BinaryReader et BinaryWriter pour stocker et récupérer les objets commandé des données à partir d’un fichier de données nommé Regions.dat au lieu de récupérer et de classer des données chaque fois que l’application est exécutée.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. L’exemple vérifie d’abord pour déterminer si le fichier de données existe.The example first checks to determine whether the data file exists. Si elle n’est pas le cas, il crée les données et définit le reindex indicateur qui signale que les données doivent être recourues et enregistrées à nouveau.If it does not, it creates the data and sets the reindex flag, which indicates that the data must be resorted and saved again. Sinon, elle récupère les données et compare l’enregistré SortVersion de l’objet avec le SortVersion objet pour la culture actuelle sur le système actuel.Otherwise, it retrieves the data and compares the saved SortVersion object with the SortVersion object for the current culture on the current system. Si elles ne sont pas égales, ou si le reindex indicateur avait été défini précédemment, il recourt le RegionInfo données.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

Remarques

Comparaison de chaîne et de tri dans le .NET FrameworkSorting and string comparison in the .NET Framework

À partir de la .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1 via la .NET Framework 4.NET Framework 4, chaque version du.NET Framework a inclus les tables qui contiennent des pondérations de tri et les données sur la normalisation des chaînes et qui sont basées sur une version particulière de caractères Unicode.From 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. Dans le .NET Framework 4.5.NET Framework 4.5, la présence de ces tables dépend du système d’exploitation :In the .NET Framework 4.5.NET Framework 4.5, the presence of these tables depends on the operating system:

  • Sur Windows 7Windows 7 et les versions précédentes du système d’exploitation Windows, les tables continuent à être utilisés pour comparer et trier les chaînes.On Windows 7Windows 7 and previous versions of the Windows operating system, the tables continue to be used for comparing and ordering strings.

  • Sur Windows 8Windows 8, le .NET Framework délègue la comparaison de chaînes et l’ordre des opérations du système d’exploitation.On Windows 8Windows 8, the .NET Framework delegates string comparison and ordering operations to the operating system.

Par conséquent, le résultat d’une comparaison de chaînes peut dépendre non seulement sur la version du .NET Framework, mais également sur la version de système d’exploitation, comme le tableau suivant.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. Notez que cette liste de versions d’Unicode prises en charge s’applique uniquement à la comparaison et au tri de caractères ; elle ne s’applique pas à la classification des caractères Unicode par catégorie.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.

Version du .NET Framework.NET Framework version Système d'exploitationOperating system Version d’UnicodeUnicode version
.NET Framework 4.NET Framework 4 Tous les systèmes d’exploitationAll operating systems Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5 et versions ultérieures du .NET Frameworkand later versions of the .NET Framework Windows 7Windows 7 Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5 et versions ultérieures du .NET Frameworkand later versions of the .NET Framework Windows 8Windows 8 et les versions ultérieures du système d’exploitation Windowsand later Windows operating system versions Unicode 6.0Unicode 6.0

Sur Windows 8Windows 8, car la version d’Unicode utilisée dans la comparaison de chaînes et classement dépend de la version du système d’exploitation, les résultats de comparaison de chaînes peuvent varier même pour les applications qui s’exécutent sur une version spécifique du .NET Framework.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.

Comparaison de chaîne et de tri dans .NET CoreSorting and string comparison in .NET Core

Toutes les versions de .NET Core s’appuient sur le système d’exploitation sous-jacent lorsque vous effectuez des comparaisons de chaînes.All versions of .NET Core rely on the underlying operating system when performing string comparisons. Par conséquent, les résultats d’une comparaison de chaînes ou de l’ordre dans lequel les chaînes sont triées dépend de la version d’Unicode utilisée par le système d’exploitation pour effectuer la comparaison.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. Sur Linux et macOS, International Components for Unicode bibliothèques fournissent l’implémentation de comparaison et tri des API.On Linux and macOS, International Components for Unicode libraries provide the implementation for comparison and sorting APIs.

À l’aide de la classe SortVersionUsing the SortVersion class

Le SortVersion classe fournit des informations sur la version Unicode utilisée par .NET pour la comparaison de chaînes et de classement.The SortVersion class provides information about the Unicode version used by .NET for string comparison and ordering. Il permet aux développeurs d’écrire des applications qui peuvent détecter et gérer correctement les modifications dans la version d’Unicode est utilisé pour comparer et trier les chaînes d’une application.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.

Vous pouvez instancier un SortVersion objet de deux manières :You can instantiate a SortVersion object in two ways:

  • En appelant le SortVersion constructeur, qui instancie un nouveau SortVersion basé sur un numéro de version de l’objet et de trier le code.By calling the SortVersion constructor, which instantiates a new SortVersion object based on a version number and sort ID. Ce constructeur est particulièrement utile lorsque vous recréez un SortVersion objet à partir des données enregistrées.This constructor is most useful when recreating a SortVersion object from saved data.

  • En récupérant la valeur de la CompareInfo.Version propriété.By retrieving the value of the CompareInfo.Version property. Cette propriété fournit des informations sur la version d’Unicode utilisée par l’implémentation de .NET sur laquelle l’application est en cours d’exécution.This property provides information about the Unicode version used by the .NET implementation on which the application is running.

Le SortVersion classe a deux propriétés, FullVersion et SortId, qui indiquent la version Unicode et la culture spécifique utilisé pour la comparaison de chaîne.The SortVersion class has two properties, FullVersion and SortId, that indicate the Unicode version and the specific culture used for string comparison. Le FullVersion propriété est une valeur numérique arbitraire qui reflète la version Unicode utilisée pour la comparaison de chaînes, et le SortId propriété est arbitraire Guid qui reflète la culture dont les conventions sont utilisées pour la comparaison de chaînes.The 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. Les valeurs de ces deux propriétés sont importantes uniquement lorsque vous comparez deux SortVersion objets à l’aide de la Equals (méthode), le Equality opérateur, ou la Inequality opérateur.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.

Vous utilisez généralement un SortVersion objet lors de l’enregistrement ou de récupérer une forme de la culture, ordonné des données de type chaîne, telles que des index ou le littéral chaînes eux-mêmes.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. Ce processus implique les étapes suivantes :This requires the following steps:

  1. Lorsque les données de chaîne ordonné sont enregistrées, le FullVersion et SortId les valeurs de propriété sont également enregistrés.When the ordered string data is saved, the FullVersion and SortId property values are also saved.

  2. Lorsque les données de chaîne ordonnée sont récupérées, vous pouvez recréer le SortVersion objet utilisé pour classer les chaînes en appelant le SortVersion constructeur.When the ordered string data is retrieved, you can recreate the SortVersion object used for ordering the strings by calling the SortVersion constructor.

  3. Ce qui vient d’être instancié SortVersion objet est comparé à une SortVersion objet qui reflète la culture dont les conventions sont utilisées pour classer les données de chaîne.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. Si les deux SortVersion objets ne sont pas égaux, les données de chaîne doivent être réorganisées.If the two SortVersion objects are not equal, the string data must be reordered.

Cet exemple en fournit une illustration.The example provides an illustration.

Constructeurs

SortVersion(Int32, Guid) SortVersion(Int32, Guid) SortVersion(Int32, Guid) SortVersion(Int32, Guid)

Crée une instance de la classe SortVersion.Creates a new instance of the SortVersion class.

Propriétés

FullVersion FullVersion FullVersion FullVersion

Obtient le numéro de version complet de l’objet SortVersion.Gets the full version number of the SortVersion object.

SortId SortId SortId SortId

Obtient un identificateur global unique pour cet objet SortVersion.Gets a globally unique identifier for this SortVersion object.

Méthodes

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Retourne une valeur indiquant si cette instance SortVersion équivaut à un objet spécifié.Returns a value that indicates whether this SortVersion instance is equal to a specified object.

Equals(SortVersion) Equals(SortVersion) Equals(SortVersion) Equals(SortVersion)

Retourne une valeur indiquant si cette instance SortVersion équivaut à un objet SortVersion spécifié.Returns a value that indicates whether this SortVersion instance is equal to a specified SortVersion object.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Retourne un code de hachage pour cette instance.Returns a hash code for this instance.

GetType() GetType() GetType() GetType()

Obtient le Type de l'instance actuelle.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crée une copie superficielle du Object actuel.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Retourne une chaîne qui représente l'objet actuel.Returns a string that represents the current object.

(Inherited from Object)

Opérateurs

Equality(SortVersion, SortVersion) Equality(SortVersion, SortVersion) Equality(SortVersion, SortVersion) Equality(SortVersion, SortVersion)

Indique si deux instances de SortVersion sont égales.Indicates whether two SortVersion instances are equal.

Inequality(SortVersion, SortVersion) Inequality(SortVersion, SortVersion) Inequality(SortVersion, SortVersion) Inequality(SortVersion, SortVersion)

Indique si deux instances de SortVersion ne sont pas égales.Indicates whether two SortVersion instances are not equal.

S’applique à

Voir aussi