CompareOptions列挙型も、StringComparisonと同じく文字列比較の際の動作を指定するための列挙型ですが、StringComparisonよりも具体的な指定を行うことが出来ます。 StringComparisonの場合と異なり、StringクラスではCompareメソッドのみがCompareOptionsを指定した比較をサポートしています。

以下はString.CompareメソッドにCompareOptionsを指定して文字列の比較を行う例です。

CompareOptionsを指定して文字列の比較を行う
using System;
using System.Globalization;
using System.Threading;

class Sample {
  static void Main()
  {
    Console.WriteLine("CompareOptions.None       : {0}", String.Compare("abc", "ABC", Thread.CurrentThread.CurrentCulture, CompareOptions.None));
    Console.WriteLine("CompareOptions.IgnoreCase : {0}", String.Compare("abc", "ABC", Thread.CurrentThread.CurrentCulture, CompareOptions.IgnoreCase));
  }
}
実行結果
CompareOptions.None       : -1
CompareOptions.IgnoreCase : 0

CompareOptionsを指定する場合は、次の値を組み合わせて指定することができます。

CompareOptions
CompareOptionsの値 文字列比較時の動作 解説
None デフォルトの動作で比較する -
IgnoreCase 大文字小文字の違いを無視して比較する 解説へ
IgnoreKanaType ひらがなとカタカナの違いを無視して比較する
IgnoreWidth 全角と半角の違いを無視して比較する
IgnoreNonSpace 濁点付きの文字、囲み文字や発音記号など、基本となる文字と修飾記号の組み合わせになる文字について、非スペーシング組み合わせ文字となる修飾記号を無視して比較する
(例として、"えと""えど""cafe""café""1""①"は同じ文字列として扱われる)
解説へ
IgnoreSymbols 空白文字・句読点・その他の記号を無視して比較する
(例として、"Hello, world!""Helloworld"は同じ文字列として扱われる)
解説へ
StringSort ハイフン・アポストロフィが英数字や他の記号よりも前になるように比較する
(例として、"can't""cant"より小さいとして扱われる)
解説へ
Ordinal 文字列の各文字を数値(Unicode序数、Unicode ordinal)=コードポイントで比較する (StringComparison.Ordinalと同じ)
OrdinalIgnoreCase 文字列の各文字を数値(Unicode序数、Unicode ordinal)=コードポイントで比較する
大文字小文字の違いは無視する
(StringComparison.OrdinalIgnoreCaseと同じ)

個々のオプションと動作の詳細については追って解説します。 なお、OrdinalおよびOrdinalIgnoreCaseは他の値とは組み合わせることはできないため、単独で使用する必要があります。

ソートやDictionaryのキー比較にCompareOptionsを使用する方法については§.CompareOptionsに対応するStringComparerの取得で追って解説します。