SortVersion Clase

Definición

Proporciona información sobre la versión de Unicode utilizada para comparar y ordenar cadenas.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)
Herencia
SortVersion
Atributos
Implementaciones

Ejemplos

El ejemplo siguiente contiene una parte del código fuente de una aplicación que utiliza la SortVersion clase para asegurarse de que los nombres nativos de RegionInfo los objetos se ordenan correctamente para el sistema actual y la referencia cultural actual.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. Utiliza los objetos BinaryReader y BinaryWriter para almacenar y recuperar los datos ordenados de un archivo de Regions.dat datos denominado en lugar de recuperar y ordenar los datos cada vez que se ejecuta la aplicación.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. En primer lugar, el ejemplo comprueba si existe el archivo de datos.The example first checks to determine whether the data file exists. Si no es así, crea los datos y establece la reindex marca, lo que indica que los datos se deben volver a ordenar y guardar.If it does not, it creates the data and sets the reindex flag, which indicates that the data must be resorted and saved again. De lo contrario, recupera los datos y compara el objeto guardado SortVersion con el SortVersion objeto de la referencia cultural actual en el sistema actual.Otherwise, it retrieves the data and compares the saved SortVersion object with the SortVersion object for the current culture on the current system. Si no son iguales, o si la reindex marca se ha establecido anteriormente, recurre a los RegionInfo datos.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

Comentarios

Ordenación y comparación de cadenas en el .NET FrameworkSorting and string comparison in the .NET Framework

A través de, cada versión de The.NET Framework incluye tablas que contienen pesos de ordenación y datos sobre la normalización de cadenas y que se basan en una versión concreta de Unicode. .NET Framework 4.NET Framework 4 .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.5En, la presencia de estas tablas depende del sistema operativo:In the .NET Framework 4.5.NET Framework 4.5, the presence of these tables depends on the operating system:

  • En Windows 7Windows 7 y versiones anteriores del sistema operativo Windows, las tablas continúan utilizándose para comparar y ordenar cadenas.On Windows 7Windows 7 and previous versions of the Windows operating system, the tables continue to be used for comparing and ordering strings.

  • En Windows 8Windows 8, el .NET Framework delega las operaciones de comparación y ordenación de cadenas en el sistema operativo.On Windows 8Windows 8, the .NET Framework delegates string comparison and ordering operations to the operating system.

Por consiguiente, el resultado de una comparación de cadenas puede depender no solo de la versión de .NET Framework, sino también de la versión del sistema operativo, como se muestra en la tabla siguiente.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. Tenga en cuenta que esta lista de versiones compatibles de Unicode se aplica solo a la comparación y ordenación de caracteres; no se aplica a la clasificación de caracteres Unicode por categoría.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.

Versión de .NET Framework.NET Framework version Sistema operativoOperating system Versión de UnicodeUnicode version
.NET Framework 4.NET Framework 4 Todos los sistemas operativosAll operating systems Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5y versiones posteriores del .NET Frameworkand later versions of the .NET Framework Windows 7Windows 7 Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5y versiones posteriores del .NET Frameworkand later versions of the .NET Framework Windows 8Windows 8y versiones posteriores del sistema operativo Windowsand later Windows operating system versions Unicode 6.0Unicode 6.0

En Windows 8Windows 8, dado que la versión de Unicode utilizada en la comparación y ordenación de cadenas depende de la versión del sistema operativo, los resultados de la comparación de cadenas pueden diferir incluso en las aplicaciones que se ejecutan en una versión específica de la .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.

Ordenación y comparación de cadenas en .NET CoreSorting and string comparison in .NET Core

Todas las versiones de .NET Core se basan en el sistema operativo subyacente al realizar comparaciones de cadenas.All versions of .NET Core rely on the underlying operating system when performing string comparisons. Por lo tanto, los resultados de una comparación de cadenas o el orden en el que se ordenan las cadenas dependen de la versión de Unicode utilizada por el sistema operativo al realizar la comparación.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. En Linux y macOS, los componentes internacionales de las bibliotecas Unicode proporcionan la implementación para las API de comparación y ordenación.On Linux and macOS, International Components for Unicode libraries provide the implementation for comparison and sorting APIs.

Usar la clase SortVersionUsing the SortVersion class

La SortVersion clase proporciona información sobre la versión Unicode utilizada por .net para la comparación y ordenación de cadenas.The SortVersion class provides information about the Unicode version used by .NET for string comparison and ordering. Permite a los desarrolladores escribir aplicaciones que pueden detectar y controlar correctamente los cambios en la versión de Unicode que se usa para comparar y ordenar las cadenas de una aplicación.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.

Puede crear instancias de un SortVersion objeto de dos maneras:You can instantiate a SortVersion object in two ways:

  • Llamando al SortVersion constructor, que crea una instancia de un SortVersion nuevo objeto basándose en un número de versión y un identificador de ordenación.By calling the SortVersion constructor, which instantiates a new SortVersion object based on a version number and sort ID. Este constructor es muy útil cuando se recrea SortVersion un objeto a partir de datos guardados.This constructor is most useful when recreating a SortVersion object from saved data.

  • Recuperando el valor de la CompareInfo.Version propiedad.By retrieving the value of the CompareInfo.Version property. Esta propiedad proporciona información sobre la versión Unicode utilizada por la implementación de .NET en la que se ejecuta la aplicación.This property provides information about the Unicode version used by the .NET implementation on which the application is running.

La SortVersion clase tiene dos propiedades, FullVersion y SortId, que indican la versión Unicode y la referencia cultural específica que se usa para la comparación de cadenas.The SortVersion class has two properties, FullVersion and SortId, that indicate the Unicode version and the specific culture used for string comparison. La FullVersion propiedad es un valor numérico arbitrario que refleja la versión Unicode utilizada para la comparación de cadenas, SortId y la propiedad es Guid un arbitrario que refleja la referencia cultural cuyas convenciones se usan para la comparación de cadenas.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. Los valores de estas dos propiedades solo son importantes cuando SortVersion se comparan dos objetos mediante el Equals método, Equality el operador o el Inequality operador.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.

Normalmente, se usa SortVersion un objeto al guardar o recuperar algún tipo de datos de cadena ordenados que tienen en cuenta la referencia cultural, como índices o cadenas literales.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. Para ello, siga estos pasos:This requires the following steps:

  1. Cuando se guardan los datos de la cadena FullVersion ordenada SortId , también se guardan los valores de las propiedades y.When the ordered string data is saved, the FullVersion and SortId property values are also saved.

  2. Cuando se recuperan los datos de la cadena ordenada, puede volver SortVersion a crear el objeto que se usa para ordenar SortVersion las cadenas mediante una llamada al constructor.When the ordered string data is retrieved, you can recreate the SortVersion object used for ordering the strings by calling the SortVersion constructor.

  3. Este SortVersion objeto recién creado se compara con un SortVersion objeto que refleja la referencia cultural cuyas convenciones se usan para ordenar los datos de cadena.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 los dos SortVersion objetos no son iguales, se deben reordenar los datos de la cadena.If the two SortVersion objects are not equal, the string data must be reordered.

En este ejemplo se ilustra.The example provides an illustration.

Constructores

SortVersion(Int32, Guid)

Crea una nueva instancia de la clase SortVersion.Creates a new instance of the SortVersion class.

Propiedades

FullVersion

Obtiene el número de versión completo del objeto SortVersion.Gets the full version number of the SortVersion object.

SortId

Obtiene un identificador único global para este objeto SortVersion.Gets a globally unique identifier for this SortVersion object.

Métodos

Equals(Object)

Devuelve un valor que indica si esta instancia de SortVersion equivale a un objeto especificado.Returns a value that indicates whether this SortVersion instance is equal to a specified object.

Equals(SortVersion)

Devuelve un valor que indica si esta instancia de SortVersion equivale a un objeto SortVersion especificado.Returns a value that indicates whether this SortVersion instance is equal to a specified SortVersion object.

GetHashCode()

Devuelve un código hash para esta instancia.Returns a hash code for this instance.

GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.Creates a shallow copy of the current Object.

(Heredado de Object)
ToString()

Devuelve un valor de tipo string que representa el objeto actual.Returns a string that represents the current object.

(Heredado de Object)

Operadores

Equality(SortVersion, SortVersion)

Indica si dos instancias SortVersion son iguales.Indicates whether two SortVersion instances are equal.

Inequality(SortVersion, SortVersion)

Indica si dos instancias de SortVersion no son iguales.Indicates whether two SortVersion instances are not equal.

Se aplica a

Consulte también: