StringComparison列挙型は、文字列比較の際の動作を指定するための列挙型で、次のメソッドにおいて文字列比較を行う際にオプションとして指定出来ます。
- StringComparisonを引数に指定することができるメソッド
また、StringComparisonを指定する場合は、次のいずれかを指定できます。
StringComparisonの値 | 文字列比較時の動作 | |
---|---|---|
大文字小文字の違い | 比較の規則 | |
StringComparison.CurrentCulture | 無視しない | 現在のカルチャの並べ替え規則に基づいて比較する |
StringComparison.CurrentCultureIgnoreCase | 無視する | |
StringComparison.InvariantCulture | 無視しない | インバリアントカルチャの並べ替え規則に基づいて比較する |
StringComparison.InvariantCultureIgnoreCase | 無視する | |
StringComparison.Ordinal | 無視しない | 文字列の各文字を数値(Unicode序数、Unicode ordinal)=コードポイントで比較する |
StringComparison.OrdinalIgnoreCase | 無視する |
StringComparisonを指定しない場合は、StringComparison.CurrentCultureを指定した場合と同じ動作になります。
以下はStringComparisonを指定して比較を行う例です。
StringComparisonを指定して文字列同士の比較を行う
using System;
class Sample {
static void Main()
{
var s1 = "foo";
var s2 = "FOO";
// 以下の2つは同じ動作となる
Console.WriteLine(s1.Equals(s2));
Console.WriteLine(s1.Equals(s2, StringComparison.CurrentCulture));
// 以下の2つは同じ動作となる
Console.WriteLine(String.Equals(s1, s2));
Console.WriteLine(String.Equals(s1, s2, StringComparison.CurrentCulture));
// 以下の2つは同じ動作となる
Console.WriteLine(String.Compare(s1, s2));
Console.WriteLine(String.Compare(s1, s2, StringComparison.CurrentCulture));
Console.WriteLine("[IgnoreCase]");
// 大文字小文字を無視する/しない比較
Console.WriteLine(String.Equals(s1, s2, StringComparison.CurrentCultureIgnoreCase));
Console.WriteLine(String.Equals(s1, s2, StringComparison.CurrentCulture));
Console.WriteLine(String.Compare(s1, s2, StringComparison.CurrentCultureIgnoreCase));
Console.WriteLine(String.Compare(s1, s2, StringComparison.CurrentCulture));
}
}
実行結果
False False False False -1 -1 [IgnoreCase] True False 0 -1
それぞれの違いについての具体的な解説は§.CurrentCultureとInvariantCultureの違い・§.CurrentCultureとOrdinalの違いにて、また使い分ける際の考え方については§.StringComparisonの使い分けで別途解説します。
全角と半角の違い・ひらがなとカタカナの違いを扱いたい場合はCompareOptions列挙型を使用することができます。
現在のカルチャとインバリアントカルチャなど、文字列比較に際してカルチャによって変わる動作・カルチャごとの文字列比較の規則についてはカルチャによる動作の違いとインバリアントカルチャ §.文字列比較の規則・ソート順定義(CompareInfo)としてのCurrentCultureを参照してください。 カルチャそのものに関してはカルチャの基本・種類・カルチャ情報の取得を参照してください。