SortVersion SortVersion SortVersion SortVersion Class

Definição

Fornece informações sobre a versão do Unicode usada para comparar e ordenar cadeias de caracteres.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)
Herança
SortVersionSortVersionSortVersionSortVersion
Atributos
Implementações

Exemplos

O exemplo a seguir contém uma parte do código-fonte de um aplicativo que usa SortVersion a classe para garantir que os nomes nativos RegionInfo de objetos sejam ordenados adequadamente para o sistema atual e a cultura atual.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. Ele usa os BinaryReader objetos BinaryWriter e para armazenar e recuperar dados ordenados de um arquivo de Regions.dat dados nomeado em vez de recuperar e ordenar dados cada vez que o aplicativo é executado.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. O exemplo primeiro verifica para determinar se o arquivo de dados existe.The example first checks to determine whether the data file exists. Caso contrário, ele cria os dados e define o reindex sinalizador, o que indica que os dados devem ser reclassificados e salvos novamente.If it does not, it creates the data and sets the reindex flag, which indicates that the data must be resorted and saved again. Caso contrário, ele recupera os dados e compara o SortVersion objeto salvo com SortVersion o objeto para a cultura atual no sistema atual.Otherwise, it retrieves the data and compares the saved SortVersion object with the SortVersion object for the current culture on the current system. Se eles não forem iguais ou se o reindex sinalizador tiver sido definido anteriormente, ele modelará os RegionInfo dados.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

Comentários

Classificação e comparação de cadeias de caracteres no .NET FrameworkSorting and string comparison in the .NET Framework

Do por meio do .NET Framework 4.NET Framework 4, cada versão da estrutura The.NET inclui tabelas que contêm pesos e dados de classificação na normalização de cadeia de caracteres e que se baseiam em uma versão específica do Unicode. .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.5No, a presença dessas tabelas depende do sistema operacional:In the .NET Framework 4.5.NET Framework 4.5, the presence of these tables depends on the operating system:

  • Em Windows 7Windows 7 versões anteriores do sistema operacional Windows, as tabelas continuam a ser usadas para comparar e ordenar cadeias de caracteres.On Windows 7Windows 7 and previous versions of the Windows operating system, the tables continue to be used for comparing and ordering strings.

  • No Windows 8Windows 8, o .NET Framework Delega operações de comparação e ordenação de cadeias de caracteres para o sistema operacional.On Windows 8Windows 8, the .NET Framework delegates string comparison and ordering operations to the operating system.

Consequentemente, o resultado de uma comparação de cadeia de caracteres pode depender não apenas da versão .NET Framework, mas também da versão do sistema operacional, como mostra a tabela a seguir.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. Observe que essa lista de versões com suporte do Unicode aplica-se somente à comparação e classificação de caracteres. ela não se aplica à classificação de caracteres Unicode por categoria.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.

Versão do .NET Framework.NET Framework version Sistema operacionalOperating system Versão UnicodeUnicode version
.NET Framework 4.NET Framework 4 Todos os sistemas operacionaisAll operating systems Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5e versões posteriores do .NET Frameworkand later versions of the .NET Framework Windows 7Windows 7 Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5e versões posteriores do .NET Frameworkand later versions of the .NET Framework Windows 8Windows 8e versões posteriores do sistema operacional Windowsand later Windows operating system versions Unicode 6.0Unicode 6.0

No Windows 8Windows 8, como a versão do Unicode usada em comparação e classificação de cadeia de caracteres depende da versão do sistema operacional, os resultados da comparação de cadeias de caracteres podem ser diferentes mesmo para aplicativos executados em uma versão específica do .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.

Classificação e comparação de cadeias de caracteres no .NET CoreSorting and string comparison in .NET Core

Todas as versões do .NET Core contam com o sistema operacional subjacente ao executar comparações de cadeias de caracteres.All versions of .NET Core rely on the underlying operating system when performing string comparisons. Portanto, os resultados de uma comparação de cadeias de caracteres ou a ordem na qual as cadeias são classificadas depende da versão do Unicode usada pelo sistema operacional ao executar a comparação.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. No Linux e no macOS, os componentes internacionais para bibliotecas Unicode fornecem a implementação para as APIs de comparação e classificação.On Linux and macOS, International Components for Unicode libraries provide the implementation for comparison and sorting APIs.

Usando a classe SortVersionUsing the SortVersion class

A SortVersion classe fornece informações sobre a versão Unicode usada pelo .net para a comparação e a classificação de cadeias de caracteres.The SortVersion class provides information about the Unicode version used by .NET for string comparison and ordering. Ele permite que os desenvolvedores gravem aplicativos que podem detectar e manipular com êxito as alterações na versão do Unicode que é usada para comparar e classificar as cadeias de caracteres de um aplicativo.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.

Você pode criar uma SortVersion instância de um objeto de duas maneiras:You can instantiate a SortVersion object in two ways:

  • Chamando o SortVersion Construtor, que instancia um novo SortVersion objeto com base em um número de versão e ID de classificação.By calling the SortVersion constructor, which instantiates a new SortVersion object based on a version number and sort ID. Esse construtor é mais útil ao recriar um SortVersion objeto a partir de dados salvos.This constructor is most useful when recreating a SortVersion object from saved data.

  • Recuperando o valor da CompareInfo.Version propriedade.By retrieving the value of the CompareInfo.Version property. Essa propriedade fornece informações sobre a versão Unicode usada pela implementação do .NET na qual o aplicativo está sendo executado.This property provides information about the Unicode version used by the .NET implementation on which the application is running.

A SortVersion classe tem duas propriedades, FullVersion e SortId, que indicam a versão Unicode e a cultura específica usada para comparação de cadeias de caracteres.The SortVersion class has two properties, FullVersion and SortId, that indicate the Unicode version and the specific culture used for string comparison. A FullVersion propriedade é um valor numérico arbitrário que reflete a versão Unicode usada para comparação de cadeia de caracteres SortId e a propriedade é Guid um arbitrário que reflete a cultura cujas convenções são usadas para comparação de cadeias de caracteres.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. Os valores dessas duas propriedades são importantes apenas SortVersion quando você compara dois objetos usando o Equals método, o Equality operador ou o 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, você usa SortVersion um objeto ao salvar ou recuperar alguma forma de dados de cadeia de caracteres ordenados e diferenciais de cultura, como índices ou as próprias cadeias literais.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. Isso exige as seguintes etapas:This requires the following steps:

  1. Quando os dados de cadeia de caracteres ordenados FullVersion são SortId salvos, os valores de propriedade e também são salvos.When the ordered string data is saved, the FullVersion and SortId property values are also saved.

  2. Quando os dados de cadeia de caracteres ordenados são recuperados, SortVersion você pode recriar o objeto usado para ordenar as cadeias chamando o SortVersion Construtor.When the ordered string data is retrieved, you can recreate the SortVersion object used for ordering the strings by calling the SortVersion constructor.

  3. Esse SortVersion objeto instanciado recentemente é comparado com um SortVersion objeto que reflete a cultura cujas convenções são usadas para ordenar os dados da cadeia de caracteres.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. Se os dois SortVersion objetos não forem iguais, os dados da cadeia de caracteres deverão ser reordenados.If the two SortVersion objects are not equal, the string data must be reordered.

O exemplo fornece uma ilustração.The example provides an illustration.

Construtores

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

Cria uma nova instância da classe SortVersion.Creates a new instance of the SortVersion class.

Propriedades

FullVersion FullVersion FullVersion FullVersion

Obtém o número de versão completo do objeto SortVersion.Gets the full version number of the SortVersion object.

SortId SortId SortId SortId

Obtém um identificador global exclusivo para esse objeto SortVersion.Gets a globally unique identifier for this SortVersion object.

Métodos

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

Retorna um valor que indica se essa instância SortVersion é igual a um objeto especificado.Returns a value that indicates whether this SortVersion instance is equal to a specified object.

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

Retorna um valor que indica se essa instância SortVersion é igual a um objeto SortVersion especificado.Returns a value that indicates whether this SortVersion instance is equal to a specified SortVersion object.

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

Retorna um código hash para essa instância.Returns a hash code for this instance.

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

Obtém o Type da instância atual.Gets the Type of the current instance.

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

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

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

Retorna uma cadeia de caracteres que representa o objeto atual.Returns a string that represents the current object.

(Inherited from Object)

Operadores

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

Indica se duas instâncias SortVersion são iguais.Indicates whether two SortVersion instances are equal.

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

Indica se duas instâncias SortVersion não são iguais.Indicates whether two SortVersion instances are not equal.

Aplica-se a

Veja também