SortVersion SortVersion SortVersion SortVersion Class


文字列の比較および並べ替えに使用される 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. 使用して、BinaryReaderBinaryWriter格納および取得するオブジェクトの順序付けという名前のデータ ファイルからデータを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を通じて、 .NET Framework 4.NET Framework 4、.net Framework のバージョンごとに並べ替えウェイトを含むテーブルが含まれているされ、文字列の正規化にあるデータが 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. .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 Framework の以降のバージョンand later versions of the .NET Framework Windows 7Windows 7 Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5 .NET Framework の以降のバージョンand 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、 International Components for 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クラスには 2 つのプロパティ、FullVersionSortIdUnicode のバージョンと文字列の比較に使用される特定のカルチャを示します。The SortVersion class has two properties, FullVersion and SortId, that indicate the Unicode version and the specific culture used for string comparison. FullVersionプロパティが文字列の比較に使用される Unicode のバージョンを反映して任意の数値の値と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. これら 2 つのプロパティの値は、2 つを比較する場合にのみ、重要な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. 順序付けられた文字列データを保存するとき、FullVersionSortIdプロパティの値が保存されます。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(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)

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

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

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