SortVersion 클래스


문자열을 비교하고 정렬하는 데 사용되는 유니코드 버전에 대한 정보를 제공합니다.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>
public sealed class SortVersion : IEquatable<System.Globalization.SortVersion>
type SortVersion = class
    interface IEquatable<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 서비스 팩 1.NET Framework 2.0 Service Pack 1 까지 .NET Framework 4.NET Framework 4 각 버전의 the.NET Framework에는 문자열 정규화에 대 한 정렬 가중치와 데이터를 포함 하 고 특정 버전의 유니코드를 기반으로 하는 테이블이 포함 되어 있습니다.From the .NET Framework 2.0 서비스 팩 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. 지원되는 유니코드 버전 목록은 문자 비교 및 정렬에만 적용되며 범주에 따른 유니코드 문자의 분류에는 적용되지 않습니다.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 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 유니코드 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 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. 따라서 문자열 비교의 결과 나 문자열이 정렬 되는 순서는 비교를 수행할 때 운영 체제에서 사용 하는 유니코드 버전에 따라 달라 집니다.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에서 유니코드 라이브러리의 국제 구성 요소 는 비교 및 정렬 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에서 사용 되는 유니코드 버전에 대 한 정보를 제공 합니다.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 버전 번호 및 정렬 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 구현에서 사용 되는 유니코드 버전에 대 한 정보를 제공 합니다.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. 정렬 된 문자열 데이터가 저장 되 면 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. 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)

두 개의 SortVersion 인스턴스가 같은지를 나타냅니다.Indicates whether two SortVersion instances are equal.

Inequality(SortVersion, SortVersion)

두 개의 SortVersion 인스턴스가 같지 않은를 표시합니다.Indicates whether two SortVersion instances are not equal.

적용 대상

추가 정보