SortVersion クラス


文字列の比較および並べ替えに使用される Unicode のバージョンに関する情報を取得します。Provides information about the version of Unicode used to compare and order strings.

public ref class SortVersion sealed : IEquatable<System::Globalization::SortVersion ^>
public sealed class SortVersion : IEquatable<System.Globalization.SortVersion>
type SortVersion = class
    interface IEquatable<SortVersion>
Public NotInheritable Class SortVersion
Implements IEquatable(Of SortVersion)

次の例には、 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.
      // 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))
         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));
      foreach (var region in regions) {

   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, 
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.
         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.
      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))
      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))      
      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))
      For Each region In regions
   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, 
   End Function
End Class


.NET Framework での並べ替えと文字列比較Sorting and string comparison in the .NET Framework

.NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1 から、the.NETFrameworkの各バージョンには、並べ替えの重みとデータを文字列の正規化に含むテーブルが含まれており、Unicodeの特定のバージョンに基づい.NET Framework 4.NET Framework 4ています。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. では.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. サポートされている Unicode バージョンの一覧は、文字の比較と並べ替えに対してのみ適用されます。カテゴリ別での Unicode 文字の分類には適用されません。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 バージョンUnicode version
.NET Framework 4.NET Framework 4 すべてのオペレーティング システムAll operating systems Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5以降のバージョンの .NET Frameworkand later versions of the .NET Framework Windows 7Windows 7 Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5以降のバージョンの .NET Frameworkand later versions of the .NET Framework Windows 8Windows 8以降のバージョンの Windows オペレーティングシステムand later Windows operating system versions Unicode 6.0Unicode 6.0

Windows 8Windows 8は、文字列比較および順序付けで使用される Unicode のバージョンはオペレーティングシステムのバージョンによって異なるため、特定のバージョンの .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 Core での並べ替えと文字列比較Sorting and string comparison in .NET Core

.NET Core のすべてのバージョンは、文字列比較を実行するときに、基になるオペレーティングシステムに依存します。All versions of .NET Core rely on the underlying operating system when performing string comparisons. したがって、文字列比較の結果、または文字列の並べ替え順序は、比較の実行時にオペレーティングシステムによって使用される Unicode のバージョンによって異なります。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 では、 Unicode ライブラリの国際化コンポーネントによって、比較と並べ替え api の実装が提供されます。On Linux and macOS, International Components for Unicode libraries provide the implementation for comparison and sorting APIs.

SortVersion クラスの使用Using the SortVersion class

クラスSortVersionは、文字列の比較と順序付けに .net で使用される Unicode バージョンに関する情報を提供します。The SortVersion class provides information about the Unicode version used by .NET for string comparison and ordering. これにより、開発者は、アプリケーションの文字列を比較および並べ替えるために使用される Unicode のバージョンの変更を検出して正常に処理できるアプリケーションを作成できます。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するには、次の2つの方法があります。You can instantiate a SortVersion object in two ways:

  • SortVersionコンストラクターを呼び出すことにより、バージョンSortVersion番号と並べ替え ID に基づいて新しいオブジェクトをインスタンス化します。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 実装で使用される Unicode バージョンに関する情報を提供します。This property provides information about the Unicode version used by the .NET implementation on which the application is running.

クラスSortVersionには、 FullVersionととSortIdいう2つのプロパティがあります。これは、Unicode バージョンと、文字列比較に使用される特定のカルチャを示します。The SortVersion class has two properties, FullVersion and SortId, that indicate the Unicode version and the specific culture used for string comparison. プロパティは、文字列比較SortIdに使用される Unicode バージョンを反映する任意の数値です。プロパティは、文字列Guid比較に使用される規則を持つカルチャを反映する任意の数値です。 FullVersionThe 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. これら2つのプロパティSortVersionの値は、 Equalsメソッド、 Equality演算子、またはInequality演算子を使用して2つのオブジェクトを比較する場合にのみ重要です。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. 2つSortVersionのオブジェクトが等しくない場合は、文字列データの順序を並べ替える必要があります。If the two SortVersion objects are not equal, the string data must be reordered.

具体的な例を次に示します。The example provides an illustration.


SortVersion(Int32, Guid)

SortVersion クラスの新しいインスタンスを作成します。Creates a new instance of the SortVersion class.



SortVersion オブジェクトの完全なバージョン番号を取得します。Gets the full version number of the SortVersion object.


この SortVersion オブジェクトの一意の識別子をグローバルに取得します。Gets a globally unique identifier for this SortVersion object.



この SortVersion インスタンスが、指定したオブジェクトに等しいかどうかを示す値を返します。Returns a value that indicates whether this SortVersion instance is equal to a specified object.


この SortVersion インスタンスが、指定した SortVersion オブジェクトに等しいかどうかを示す値を返します。Returns a value that indicates whether this SortVersion instance is equal to a specified SortVersion object.


このインスタンスのハッシュ コードを返します。Returns a hash code for this instance.


現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(継承元 Object)


Equality(SortVersion, SortVersion)

2 つの SortVersion インスタンスが等しいかどうかを示します。Indicates whether two SortVersion instances are equal.

Inequality(SortVersion, SortVersion)

SortVersion の 2 つのインスタンスが等しくないかどうかを示します。Indicates whether two SortVersion instances are not equal.