SortVersion SortVersion SortVersion SortVersion Class

Определение

Предоставляет сведения о версии Юникода, используемой для сравнения и сортировки строк.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)
Наследование
SortVersionSortVersionSortVersionSortVersion
Атрибуты
Реализации

Примеры

В следующем примере содержится часть исходного кода из приложения, использующего SortVersion класса, чтобы убедиться, что исходные имена RegionInfo объекты упорядочиваются соответствующим образом для текущей системы и текущего языка и региональных параметров.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. Она использует BinaryReader и BinaryWriter объектов для хранения и извлечения упорядоченных данных из файла данных с именем Regions.dat вместо извлечения и упорядочение данных каждый раз при запуске приложения.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. В примере сначала проверяется, чтобы определить, существует ли файл данных.The example first checks to determine whether the data file exists. Если этого не произошло, он создает данные и задает reindex флаг, указывающий, что данные необходимо сортировать и сохранить повторно.If it does not, it creates the data and sets the reindex flag, which indicates that the data must be resorted and saved again. В противном случае он извлекает данные и сравнивает сохраненные SortVersion со SortVersion объект для текущего языка и региональных параметров в текущей системе.Otherwise, it retrieves the data and compares the saved SortVersion object with the SortVersion object for the current culture on the current system. Если они не равны или если reindex флаг ранее было задано ранее, он использует RegionInfo данных.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

Комментарии

Сравнение сортировки и строки в .NET FrameworkSorting and string comparison in the .NET Framework

Из .NET Framework 2.0 с пакетом обновления 1 (SP1).NET Framework 2.0 Service Pack 1 через .NET Framework 4.NET Framework 4, каждая версия платформы.NET Framework включает в себя таблицы, содержащие весовые коэффициенты сортировки и данных на нормализацией строк, которые основаны на определенную версию Юникода.From the .NET Framework 2.0 с пакетом обновления 1 (SP1).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.5, наличие этих таблиц зависит от операционной системы:In the .NET Framework 4.5.NET Framework 4.5, the presence of these tables depends on the operating system:

  • На Windows 7Windows 7 и предыдущих версий операционной системы Windows, таблицами продолжают использоваться для сравнения и упорядочивания строк.On Windows 7Windows 7 and previous versions of the Windows operating system, the tables continue to be used for comparing and ordering strings.

  • На Windows 8Windows 8, .NET Framework делегирует сравнения строк и сортировки в операционную систему.On Windows 8Windows 8, the .NET Framework delegates string comparison and ordering operations to the operating system.

Следовательно результат сравнения строк могут зависеть не только на версию .NET Framework, но также и в версии операционной системы, как показано в следующей таблице.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. Обратите внимание, что этот список поддерживаемых версий Юникода применяется только к сравнению и сортировке символов. Он не применяется для классификации символов Юникода по категориям.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.NET Framework version Операционная системаOperating system Версия ЮникодаUnicode version
.NET Framework 4.NET Framework 4 Все операционные системыAll operating systems Юникод 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5 и более поздних версиях платформы .NET Frameworkand later versions of the .NET Framework Windows 7Windows 7 Юникод 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5 и более поздних версиях платформы .NET Frameworkand later versions of the .NET Framework Windows 8Windows 8 и более поздних версиях операционной системы Windowsand later Windows operating system versions Юникод 6.0Unicode 6.0

На Windows 8Windows 8, так как версия Юникода, используемая в сравнении строк и упорядочение зависит от версии операционной системы, результаты сравнения строк может отличаться, даже для приложений, работающих на определенной версии платформы .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.

Сравнение сортировки и строки в .NET CoreSorting and string comparison in .NET Core

Все версии .NET Core зависит от операционной системы при операциях сравнения строк.All versions of .NET Core rely on the underlying operating system when performing string comparisons. Таким образом результаты сравнения строк или порядок сортировки строк зависит от версии Юникода, используемой операционной системой, во время сравнения.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. В Linux и macOS International компоненты для Юникода библиотеки предоставляют реализации для сравнения и сортировки API-интерфейсы.On Linux and macOS, International Components for Unicode libraries provide the implementation for comparison and sorting APIs.

С помощью класса SortVersionUsing the SortVersion class

SortVersion Класс предоставляет сведения о версии Юникода, используемой платформой .NET, для сравнения строк и упорядочение.The SortVersion class provides information about the Unicode version used by .NET for string comparison and ordering. Она позволяет разработчикам создавать приложения, которые можно обнаружить и успешно обрабатывают изменения в версии Юникода, который используется для сравнения и сортировки строк приложения.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.

Можно создать экземпляр SortVersion объекта двумя способами:You can instantiate a SortVersion object in two ways:

  • Путем вызова SortVersion конструктор, который создает новый экземпляр SortVersion объекта на основе номера версии и сортировки идентификатора.By calling the SortVersion constructor, which instantiates a new SortVersion object based on a version number and sort ID. Этот конструктор может пригодиться при повторном создании SortVersion объект из сохраненных данных.This constructor is most useful when recreating a SortVersion object from saved data.

  • Извлекая значение CompareInfo.Version свойства.By retrieving the value of the CompareInfo.Version property. Это свойство предоставляет сведения о версии Юникода, используемой в реализации .NET, на котором выполняется приложение.This property provides information about the Unicode version used by the .NET implementation on which the application is running.

SortVersion Класс имеет два свойства FullVersion и SortId, которые указывают версию Юникода и конкретного языка и региональных параметров, используются для сравнения строк.The SortVersion class has two properties, FullVersion and SortId, that indicate the Unicode version and the specific culture used for string comparison. FullVersion Свойство является произвольное числовое значение, которое отражает версии Юникода, используемой для сравнения строк и SortId свойство — это произвольный Guid , отражающий языка и региональных параметров, соглашения о которых используются для сравнения строк.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. Значения этих двух свойств важны только в том случае, при сравнении двух SortVersion объектов с помощью Equals метод, Equality оператора, или Inequality оператор.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.

Как правило, используется SortVersion Если сами строки сохранение или извлечение определенные виды региональные параметры, упорядоченные строки данных, например индексов или литерала.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. Для этого необходимо выполнить следующие действия:This requires the following steps:

  1. При сохранении упорядоченный строковые данные FullVersion и SortId значения свойств, также сохраняются.When the ordered string data is saved, the FullVersion and SortId property values are also saved.

  2. Когда извлекается упорядоченный строковые данные, можно повторно создать SortVersion объект, используемый для упорядочивания строк, вызвав SortVersion конструктор.When the ordered string data is retrieved, you can recreate the SortVersion object used for ordering the strings by calling the SortVersion constructor.

  3. Это только что создан SortVersion объекта будет сравниваться со значением SortVersion , который отражает язык и региональные параметры, чьи правила используются для упорядочения строковых данных.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. Если два SortVersion объекты не равны, необходимо изменить порядок сортировки строковых данных.If the two SortVersion objects are not equal, the string data must be reordered.

Иллюстрация приведена в примере.The example provides an illustration.

Конструкторы

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

Создает новый экземпляр класса SortVersion.Creates a new instance of the SortVersion class.

Свойства

FullVersion FullVersion FullVersion FullVersion

Получает полный номер версии объекта SortVersion.Gets the full version number of the SortVersion object.

SortId SortId SortId SortId

Получает глобальный уникальный идентификатор для этого объекта SortVersion.Gets a globally unique identifier for this SortVersion object.

Методы

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

Возвращает значение, указывающее, равен ли данный экземпляр SortVersion указанному объекту.Returns a value that indicates whether this SortVersion instance is equal to a specified object.

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

Возвращает значение, указывающее, равен ли данный экземпляр SortVersion указанному объекту SortVersion.Returns a value that indicates whether this SortVersion instance is equal to a specified SortVersion object.

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

Возвращает хэш-код для данного экземпляра.Returns a hash code for this instance.

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

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

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

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

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

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Inherited from Object)

Операторы

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

Указывает, равны ли два экземпляра SortVersion.Indicates whether two SortVersion instances are equal.

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

Показывает, являются ли два экземпляра SortVersion неравными.Indicates whether two SortVersion instances are not equal.

Применяется к

Дополнительно