CompareOptions 列挙型

定義

CompareInfo で使用する文字列比較オプションを定義します。Defines the string comparison options to use with CompareInfo.

この列挙型には FlagsAttribute 属性があり、メンバー値ではビットごとの組み合わせを使用できます。

public enum class CompareOptions
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum CompareOptions
type CompareOptions = 
Public Enum CompareOptions
継承
CompareOptions
属性

フィールド

IgnoreCase 1

文字列比較で大文字と小文字を区別しないことを示します。Indicates that the string comparison must ignore case.

IgnoreKanaType 8

文字列比較でカナ型を区別しないことを示します。Indicates that the string comparison must ignore the Kana type. カナ型とは、日本語の発音を表すひらがなとカタカナの文字を指します。Kana type refers to Japanese hiragana and katakana characters, which represent phonetic sounds in the Japanese language. ひらがなは、本来の日本語の表現と単語に使用し、カタカナは "コンピューター" または "インターネット" などの外来語に使用します。Hiragana is used for native Japanese expressions and words, while katakana is used for words borrowed from other languages, such as "computer" or "Internet". 発音は、ひらがなとカタカナのどちらでも表現できます。A phonetic sound can be expressed in both hiragana and katakana. この値が選択されている場合、ある発音を示すひらがなは、同じ発音を示すカタカナと同一であると見なされます。If this value is selected, the hiragana character for one sound is considered equal to the katakana character for the same sound.

IgnoreNonSpace 2

文字列比較で、発音区別符など、非スペーシング組み合わせ文字を無視するように指定します。Indicates that the string comparison must ignore nonspacing combining characters, such as diacritics. Unicode 標準は、基本文字を組み合わせて生成される新しい文字を組み合わせ文字として定義しています。The Unicode Standard defines combining characters as characters that are combined with base characters to produce a new character. 非スペーシング組み合わせ文字は、表示されるときに文字間隔用の領域は確保しません。Nonspacing combining characters do not occupy a spacing position by themselves when rendered.

IgnoreSymbols 4

文字列比較で、空白文字、句読点、通貨記号、パーセント記号、算術記号、アンパサンドなどの記号を無視することを示します。Indicates that the string comparison must ignore symbols, such as white-space characters, punctuation, currency symbols, the percent sign, mathematical symbols, the ampersand, and so on.

IgnoreWidth 16

文字列比較で、半角と全角の区別を無視することを示します。Indicates that the string comparison must ignore the character width. たとえば、日本語のカタカナ文字は、全角または半角で記述できます。For example, Japanese katakana characters can be written as full-width or half-width. この値を選択した場合、全角で記述されたカタカナ文字は、半角で記述されたカタカナ文字と同一であると見なされます。If this value is selected, the katakana characters written as full-width are considered equal to the same characters written as half-width.

None 0

文字列比較の既定のオプション設定を示します。Indicates the default option settings for string comparisons.

Ordinal 1073741824

Unicode UTF-16 でエンコードされた連続する文字列の値 (コード単位比較に基づくコード単位) を使用して、文字列を比較することを示します。この比較は高速ですが、カルチャに依存しません。Indicates that the string comparison must use successive Unicode UTF-16 encoded values of the string (code unit by code unit comparison), leading to a fast comparison but one that is culture-insensitive. XXXX16 が YYYY16 よりも小さい場合、XXXX16 というコード単位で始まる文字列は YYYY16 で始まる文字列よりも前になります。A string starting with a code unit XXXX16 comes before a string starting with YYYY16, if XXXX16 is less than YYYY16. この値を他の CompareOptions 値と組み合わせることはできません。この値は単独で使用してください。This value cannot be combined with other CompareOptions values and must be used alone.

OrdinalIgnoreCase 268435456

文字列の比較で大文字と小文字を区別せずに、通常の比較を実行する必要があります。String comparison must ignore case, then perform an ordinal comparison. この手法は、インバリアント カルチャを使用して文字列を大文字に変換し、その結果に対して序数に基づく比較を実行することと同じです。This technique is equivalent to converting the string to uppercase using the invariant culture and then performing an ordinal comparison on the result.

StringSort 536870912

文字列の比較時に、文字列での並べ替えアルゴリズムを使用することを示します。Indicates that the string comparison must use the string sort algorithm. 文字列での並べ替えでは、ハイフン、アポストロフィ、その他の英数字以外の記号が英数字よりも前になります。In a string sort, the hyphen and the apostrophe, as well as other nonalphanumeric symbols, come before alphanumeric characters.

次のコード例は、stringsort を使用した並べ替えと、StringSort を使用しない並べ替えとの違いを示しています。The following code example shows how sorting with StringSort differs from sorting without StringSort.

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

// __gc public class SamplesCompareOptions {
ref class MyStringComparer: public IComparer
{
public:

   // Constructs a comparer using the specified CompareOptions.
   CompareInfo^ myComp;
   CompareOptions myOptions;
   MyStringComparer( CompareInfo^ cmpi, CompareOptions options )
      : myComp( cmpi ), myOptions( options )
   {}

   // Compares strings with the CompareOptions specified in the constructor.
   virtual int Compare( Object^ a, Object^ b )
   {
      if ( a == b )
            return 0;

      if ( a == nullptr )
            return  -1;

      if ( b == nullptr )
            return 1;

      String^ sa = dynamic_cast<String^>(a);
      String^ sb = dynamic_cast<String^>(b);
      if ( sa != nullptr && sb != nullptr )
            return myComp->Compare( sa, sb, myOptions );

      throw gcnew ArgumentException( "a and b should be strings." );
   }
};

int main()
{
   
   // Creates and initializes an array of strings to sort.
   array<String^>^myArr = {"cant","bill's","coop","cannot","billet","can't","con","bills","co-op"};
   Console::WriteLine( "\nInitially, " );
   IEnumerator^ myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ myStr = safe_cast<String^>(myEnum->Current);
      Console::WriteLine( myStr );
   }

   
   // Creates and initializes a Comparer to use.
   //CultureInfo* myCI = new CultureInfo(S"en-US", false);
   MyStringComparer^ myComp = gcnew MyStringComparer( CompareInfo::GetCompareInfo( "en-US" ),CompareOptions::None );
   
   // Sorts the array without StringSort.
   Array::Sort( myArr, myComp );
   Console::WriteLine( "\nAfter sorting without CompareOptions::StringSort:" );
   myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ myStr = safe_cast<String^>(myEnum->Current);
      Console::WriteLine( myStr );
   }

   
   // Sorts the array with StringSort.
   myComp = gcnew MyStringComparer( CompareInfo::GetCompareInfo( "en-US" ),CompareOptions::StringSort );
   Array::Sort( myArr, myComp );
   Console::WriteLine( "\nAfter sorting with CompareOptions::StringSort:" );
   myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ myStr = safe_cast<String^>(myEnum->Current);
      Console::WriteLine( myStr );
   }
}

/*
This code produces the following output.

Initially,
cant
bill's
coop
cannot
billet
can't
con
bills
co-op

After sorting without CompareOptions::StringSort:
billet
bills
bill's
cannot
cant
can't
con
coop
co-op

After sorting with CompareOptions::StringSort:
bill's
billet
bills
can't
cannot
cant
co-op
con
coop
*/
using System;
using System.Collections;
using System.Globalization;


public class SamplesCompareOptions  {

   private class MyStringComparer: IComparer {
      private CompareInfo myComp;   
      private CompareOptions myOptions = CompareOptions.None;

      // Constructs a comparer using the specified CompareOptions.
      public MyStringComparer( CompareInfo cmpi, CompareOptions options )  {
         myComp = cmpi;
         this.myOptions = options;
      }

      // Compares strings with the CompareOptions specified in the constructor.
      public int Compare(Object a, Object b) {
         if (a == b) return 0;
         if (a == null) return -1;
         if (b == null) return 1;

         String sa = a as String;
         String sb = b as String;
         if (sa != null && sb != null)
            return myComp.Compare(sa, sb, myOptions);
         throw new ArgumentException("a and b should be strings.");

      }
   }
   
   public static void Main()  {

      // Creates and initializes an array of strings to sort.
      String[] myArr = new String[9] { "cant", "bill's", "coop", "cannot", "billet", "can't", "con", "bills", "co-op" };
      Console.WriteLine( "\nInitially," );
      foreach ( String myStr in myArr )
         Console.WriteLine( myStr );

      // Creates and initializes a Comparer to use.
      //CultureInfo myCI = new CultureInfo( "en-US", false );
      MyStringComparer myComp = new MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.None);

      // Sorts the array without StringSort.
      Array.Sort( myArr, myComp );
      Console.WriteLine( "\nAfter sorting without CompareOptions.StringSort:" );
      foreach ( String myStr in myArr )
         Console.WriteLine( myStr );

      // Sorts the array with StringSort.
      myComp = new MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.StringSort);
      Array.Sort( myArr, myComp );
      Console.WriteLine( "\nAfter sorting with CompareOptions.StringSort:" );
      foreach ( String myStr in myArr )
         Console.WriteLine( myStr );

   }

}

/*
This code produces the following output.

Initially,
cant
bill's
coop
cannot
billet
can't
con
bills
co-op

After sorting without CompareOptions.StringSort:
billet
bills
bill's
cannot
cant
can't
con
coop
co-op

After sorting with CompareOptions.StringSort:
bill's
billet
bills
can't
cannot
cant
co-op
con
coop

*/
Imports System.Collections
Imports System.Globalization

Public Class SamplesCompareOptions

   Private Class MyStringComparer
      Implements IComparer

      Private myComp As CompareInfo
      Private myOptions As CompareOptions = CompareOptions.None
      
      ' Constructs a comparer using the specified CompareOptions.
      Public Sub New(cmpi As CompareInfo, options As CompareOptions)
         myComp = cmpi
         Me.myOptions = options
      End Sub
      
      ' Compares strings with the CompareOptions specified in the constructor.
      Public Function Compare(a As [Object], b As [Object]) As Integer Implements IComparer.Compare
         If a = b Then
            Return 0
         End If
         If a Is Nothing Then
            Return - 1
         End If
         If b Is Nothing Then
            Return 1
         End If 

         Dim sa As [String] = a
         Dim sb As [String] = b
         If Not (sa Is Nothing) And Not (sb Is Nothing) Then
            Return myComp.Compare(sa, sb, myOptions)
         End If
         Throw New ArgumentException("a and b should be strings.")

      End Function 'Compare 

   End Class


   Public Shared Sub Main()
      
      ' Creates and initializes an array of strings to sort.
      Dim myArr() As [String] = {"cant", "bill's", "coop", "cannot", "billet", "can't", "con", "bills", "co-op"}
      Console.WriteLine()
      Console.WriteLine("Initially,")
      Dim myStr As [String]
      For Each myStr In  myArr
         Console.WriteLine(myStr)
      Next myStr 

      ' Creates and initializes a Comparer to use.
      'CultureInfo myCI = new CultureInfo( "en-US", false );
      Dim myComp As New MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.None)
      
      ' Sorts the array without StringSort.
      Array.Sort(myArr, myComp)
      Console.WriteLine()
      Console.WriteLine("After sorting without CompareOptions.StringSort:")
      For Each myStr In  myArr
         Console.WriteLine(myStr)
      Next myStr 

      ' Sorts the array with StringSort.
      myComp = New MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.StringSort)
      Array.Sort(myArr, myComp)
      Console.WriteLine()
      Console.WriteLine("After sorting with CompareOptions.StringSort:")
      For Each myStr In  myArr
         Console.WriteLine(myStr)
      Next myStr 

   End Sub

End Class


'This code produces the following output.
'
'Initially,
'cant
'bill's
'coop
'cannot
'billet
'can't
'con
'bills
'co-op
'
'After sorting without CompareOptions.StringSort:
'billet
'bills
'bill's
'cannot
'cant
'can't
'con
'coop
'co-op
'
'After sorting with CompareOptions.StringSort:
'bill's
'billet
'bills
'can't
'cannot
'cant
'co-op
'con
'coop

注釈

これらのオプションは、大文字と小文字の区別、または文字の種類を無視する必要があります。These options denote case sensitivity or necessity to ignore types of characters.

.NET では、単語の並べ替え、文字列の並べ替え、序数に基づく並べ替えという3つの並べ替え方法が使用されます。.NET uses three distinct ways of sorting: word sort, string sort, and ordinal sort. 単語の並べ替えでは、カルチャに依存した文字列の比較が実行されます。Word sort performs a culture-sensitive comparison of strings. 一部の英数字以外の文字には、特別な重みが割り当てられている場合があります。Certain nonalphanumeric characters might have special weights assigned to them. たとえば、ハイフン ("-") に割り当てられる重みは非常に小さいため、並べ替えられたリスト内の "coop" と "co-op" の出現位置は隣接します。For example, the hyphen ("-") might have a very small weight assigned to it so that "coop" and "co-op" appear next to each other in a sorted list. 文字列の並べ替えは word の並べ替えに似ていますが、特殊なケースは存在しません。String sort is similar to word sort, except that there are no special cases. そのため、英数字以外のすべての記号は、すべての英数字の前に記述します。Therefore, all nonalphanumeric symbols come before all alphanumeric characters. 序数の並べ替えでは、文字列の各要素の Unicode 値に基づいて文字列を比較します。Ordinal sort compares strings based on the Unicode values of each element of the string. Windows オペレーティングシステムの並べ替えおよび比較操作で使用される文字の重みに関する情報を含む、ダウンロード可能なテキストファイルのセットについては、「重みテーブルの並べ替え」を参照してください。For a downloadable set of text files that contain information on the character weights used in sorting and comparison operations for Windows operating systems, see Sorting Weight Tables. Linux と macOS の並べ替えの重みテーブルについては、「 Unicode 照合順序要素の既定の表」を参照してください。For the sort weight table for Linux and macOS, see the Default Unicode Collation Element Table. Linux と macOS での並べ替え重みのテーブルの特定のバージョンは、システムにインストールされている International Components for Unicode ライブラリのバージョンによって異なります。The specific version of the sort weight table on Linux and macOS depends on the version of the International Components for Unicode libraries installed on the system. 実装される ICU のバージョンと Unicode のバージョンに関する情報は、ICU のダウンロードに関する記事を参照してください。For information on ICU versions and the Unicode versions that they implement, see Downloading ICU.

StringSortは、 CompareInfo.Compare およびCompareInfo.GetSortKeyでのみ使用できます。The StringSort value can only be used with CompareInfo.Compare and CompareInfo.GetSortKey. ArgumentExceptionstringsort CompareInfo.IsPrefix値がCompareInfo.IsSuffix CompareInfo.LastIndexOf、、、またはで使用されている場合は、がスローされます。CompareInfo.IndexOfArgumentException is thrown if the StringSort value is used with CompareInfo.IsPrefix, CompareInfo.IsSuffix, CompareInfo.IndexOf, or CompareInfo.LastIndexOf.

注意

可能であれば、値をCompareOptions受け取る文字列比較メソッドを使用して、予想される比較の種類を指定する必要があります。When possible, you should use string comparison methods that accept a CompareOptions value to specify the kind of comparison expected. 一般的な規則として、ユーザー向けの比較は、(現在のカルチャを使用して) 言語オプションを使用することによっOrdinalOrdinalIgnoreCase最適に実行されます。一方、セキュリティの比較では、またはを指定する必要があります。As a general rule, user-facing comparisons are best served by the use of linguistic options (using the current culture), while security comparisons should specify Ordinal or OrdinalIgnoreCase.

カルチャに依存した並べ替えに関する注意事項Notes on culture-sensitive sorts

注意

Linux および macOS システム上で実行されている .NET Core のみ: C と Posix のカルチャの照合順序の動作では、大文字小文字が常に区別されます。これらのカルチャでは想定されている Unicode 照合順序が使われないためです。.NET Core running on Linux and macOS systems only: The collation behavior for the C and Posix cultures is always case-sensitive because these cultures do not use the expected Unicode collation order. カルチャに依存する、大文字と小文字を区別しない並べ替え操作を実行する場合は、C または Posix 以外のカルチャを使うことをお勧めします。We recommend that you use a culture other than C or Posix for performing culture-sensitive, case-insensitive sorting operations.

適用対象

こちらもご覧ください