CurrentCulture
とInvariantCulture
は特定のカルチャでの規則に基づいて比較を行いますが、一方Ordinal
ではカルチャに依存せず、文字列の各文字を数値(Unicode序数、Unicode ordinal)、つまりコードポイントで比較します。
CurrentCulture
の場合は亜(あ)の方が井(い)より小さい(前に並ぶ)、つまり"亜<井"とされます。
対してOrdnal
の場合は、井(U+4E95)の方が亜(U+4E9C)よりも小さい(前に並ぶ)、つまり"亜>井"とされるため、上記のような結果となります。 (0x4E9C - 0x4E95 = 0x0007 = 7である点に注目するとわかりやすいかもしれません)
また、次のような例をとって違いを見てみます。
CurrentCulture
の場合は辞書的な並びでの比較となり、"coop"は"co-op"よりも前、"cant"は"can't"よりも前、つまり"coop<co-op"、"cant<can't"という結果になります。
対してOrdinal
の場合は、"coop"と"co-op"の3文字目を比較するとo(U+006F)と-(U+002D)であるため"coop>co-op"という結果になります。 同様に、"cant"と"can't"の3文字目はt(U+0074)と'(U+0027)であるため"cant>can't"という結果になります。 (この結果も、0x006F - 0x002D = 0x0042 = 66、0x0074-0x0027 = 0x004D = 77である点に注目するとよりわかりやすいかもしれません)
CurrentCultureIgnoreCase
とOrdinalIgnoreCase
の場合もこれと同様の動作となります。