SortVersion SortVersion SortVersion SortVersion Class

Definizione

Fornisce le informazioni sulla versione di Unicode usata per confrontare e ordinare le stringhe.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)
Ereditarietà
SortVersionSortVersionSortVersionSortVersion
Attributi
Implementazioni

Esempi

L'esempio seguente contiene una parte del codice sorgente da un'applicazione che usa il SortVersion classe per assicurarsi che i nomi nativi di RegionInfo gli oggetti vengono ordinati in modo appropriato per il sistema corrente e impostazioni cultura correnti.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. Usa il BinaryReader e BinaryWriter ordinati in oggetti per archiviare e recuperare dati da un file di dati denominato Regions.dat anziché il recupero e l'ordinamento dei dati ogni volta che viene eseguita l'applicazione.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'esempio viene innanzitutto verificata per determinare se esiste il file di dati.The example first checks to determine whether the data file exists. Se non esiste, crea i dati e imposta il reindex flag che indica che i dati devono essere riordinati e salvare di nuovo.If it does not, it creates the data and sets the reindex flag, which indicates that the data must be resorted and saved again. In caso contrario, recupera i dati e confronta il salvata SortVersion dell'oggetto con il SortVersion oggetto per le impostazioni cultura correnti del sistema corrente.Otherwise, it retrieves the data and compares the saved SortVersion object with the SortVersion object for the current culture on the current system. Se non sono uguali o se il reindex flag è stato impostato in precedenza, ricorre il RegionInfo dati.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

Commenti

Confronto tra l'ordinamento e stringa in .NET FrameworkSorting and string comparison in the .NET Framework

Dal .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1 attraverso il .NET Framework 4.NET Framework 4, ogni versione di.NET Framework è incluso le tabelle che contengono diversi ordinamenti e dati sulla normalizzazione delle stringhe e che si basano su una particolare versione di 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. Nel .NET Framework 4.5.NET Framework 4.5, la presenza di queste tabelle dipende dal sistema operativo:In the .NET Framework 4.5.NET Framework 4.5, the presence of these tables depends on the operating system:

  • In Windows 7Windows 7 continuando le versioni precedenti del sistema operativo Windows, le tabelle da utilizzare per il confronto e ordinamento di stringhe.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 8, .NET Framework delega confronto tra stringhe e ordinamento di operazioni al sistema operativo.On Windows 8Windows 8, the .NET Framework delegates string comparison and ordering operations to the operating system.

Di conseguenza, il risultato di un confronto tra stringhe affidabili non solo la versione di .NET Framework, ma anche la versione del sistema operativo, come illustrato nella tabella seguente.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. Si noti che l'elenco delle versioni supportate da Unicode si applica soltanto al confronto dei caratteri e all'ordinamento alfabetico; non si applica alla classificazione di caratteri Unicode in base alla 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.

Versione di .NET Framework.NET Framework version Sistema operativoOperating system Versione UnicodeUnicode version
.NET Framework 4.NET Framework 4 Tutti i sistemi operativiAll operating systems Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5 e versioni successive di .NET Frameworkand later versions of the .NET Framework Windows 7Windows 7 Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5 e versioni successive di .NET Frameworkand later versions of the .NET Framework Windows 8Windows 8 e versioni successive del sistema operativo Windowsand later Windows operating system versions Unicode 6.0Unicode 6.0

In Windows 8Windows 8, perché la versione di Unicode utilizzato nel confronto tra stringhe e ordinamento dipende dalla versione del sistema operativo, i risultati del confronto tra stringhe possono variare anche per le applicazioni eseguite in una versione specifica di .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.

Confronto tra l'ordinamento e stringa in .NET CoreSorting and string comparison in .NET Core

Tutte le versioni di .NET Core si basano sul sistema operativo sottostante durante l'esecuzione di confronti di stringhe.All versions of .NET Core rely on the underlying operating system when performing string comparisons. Di conseguenza, i risultati di un confronto tra stringhe o l'ordine in cui le stringhe vengono ordinate dipende dalla versione Unicode usata dal sistema operativo quando si esegue il confronto.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. Su Linux e macOS International componenti per Unicode librerie forniscono l'implementazione per il confronto e ordinamento di API.On Linux and macOS, International Components for Unicode libraries provide the implementation for comparison and sorting APIs.

Utilizzo della classe SortVersionUsing the SortVersion class

Il SortVersion classe fornisce informazioni sulla versione Unicode utilizzata da .NET per confronto tra stringhe e di ordinamento.The SortVersion class provides information about the Unicode version used by .NET for string comparison and ordering. Consente agli sviluppatori di scrivere applicazioni in grado di rilevare e gestire correttamente le modifiche nella versione di Unicode utilizzato per confrontare e ordinare le stringhe di un'applicazione.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.

È possibile creare un'istanza di un SortVersion oggetto in due modi:You can instantiate a SortVersion object in two ways:

  • Chiamando il SortVersion costruttore, che crea un'istanza di un nuovo SortVersion basato su un numero di versione dell'oggetto e l'ordinamento ID.By calling the SortVersion constructor, which instantiates a new SortVersion object based on a version number and sort ID. Questo costruttore è particolarmente utile quando si ricrea un SortVersion oggetto dai dati salvati.This constructor is most useful when recreating a SortVersion object from saved data.

  • Recuperando il valore della CompareInfo.Version proprietà.By retrieving the value of the CompareInfo.Version property. Questa proprietà fornisce informazioni sulla versione Unicode usata dall'implementazione di .NET in cui viene eseguita l'applicazione.This property provides information about the Unicode version used by the .NET implementation on which the application is running.

Il SortVersion classe ha due proprietà, FullVersion e SortId, che indicano la versione Unicode e le impostazioni cultura specifiche utilizzate per il confronto di stringa.The SortVersion class has two properties, FullVersion and SortId, that indicate the Unicode version and the specific culture used for string comparison. Il FullVersion proprietà è un valore numerico arbitrario che riflette la versione Unicode usata per il confronto di stringhe, e il SortId proprietà è un oggetto arbitrario Guid che riflette la cultura di cui vengono adottate per confronto fra stringhe.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. I valori di queste due proprietà sono importanti solo quando si confrontano due SortVersion oggetti usando il Equals metodo, il Equality operatore, o il Inequality operatore.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 genere si usa un SortVersion dell'oggetto durante il salvataggio o il recupero di qualche tipo di distinzione delle impostazioni cultura, ordinati in dati di tipo stringa, ad esempio indici o il valore letterale di stringhe stesse.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. La procedura da adottare è la seguente:This requires the following steps:

  1. Quando viene salvati i dati della stringa ordinato, la FullVersion e SortId vengono salvati anche i valori delle proprietà.When the ordered string data is saved, the FullVersion and SortId property values are also saved.

  2. Quando vengono recuperati i dati della stringa ordinato, è possibile ricreare il SortVersion oggetto utilizzato per ordinare le stringhe mediante la chiamata di SortVersion costruttore.When the ordered string data is retrieved, you can recreate the SortVersion object used for ordering the strings by calling the SortVersion constructor.

  3. Ciò appena creata un'istanza SortVersion oggetto viene confrontato con un SortVersion che riflette la cultura le cui convenzioni vengono utilizzate per ordinare i dati della stringa.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 i due SortVersion oggetti non sono uguali, i dati della stringa devono essere riordinati.If the two SortVersion objects are not equal, the string data must be reordered.

Nell'esempio viene illustrata una situazione di questo tipo.The example provides an illustration.

Costruttori

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

Crea una nuova istanza della classe SortVersion.Creates a new instance of the SortVersion class.

Proprietà

FullVersion FullVersion FullVersion FullVersion

Ottiene il numero di versione completo dell'oggetto SortVersion.Gets the full version number of the SortVersion object.

SortId SortId SortId SortId

Ottiene un identificatore globalmente univoco per questo oggetto SortVersion.Gets a globally unique identifier for this SortVersion object.

Metodi

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

Restituisce un valore che indica se l'istanza SortVersion è uguale a un oggetto specificato.Returns a value that indicates whether this SortVersion instance is equal to a specified object.

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

Restituisce un valore che indica se l'istanza SortVersion è uguale a un oggetto SortVersion specificato.Returns a value that indicates whether this SortVersion instance is equal to a specified SortVersion object.

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

Restituisce un codice hash per questa istanza.Returns a hash code for this instance.

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

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

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

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

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

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Inherited from Object)

Operatori

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

Indica se due istanze di SortVersion sono uguali.Indicates whether two SortVersion instances are equal.

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

Indica se due istanze di SortVersion non sono uguali.Indicates whether two SortVersion instances are not equal.

Si applica a

Vedi anche