IndexOfのCompareOptionsの詳しい解説

IndexOfでのCompareOptionsについてid:siokoshou:20050411のプログラムでいろいろ調べてみました。
Compareはまた別かもしれないので注意!


Ordinalは各文字のUnicode値を単純に比較する。もっとも単純な比較処理。デフォルトがこれだと思っていたら痛い目に会うので注意!


IgnoreCaseは大文字と小文字の区別をしない比較。「cool」と「Cool」、「COOL」、「cOOl」、「cool」が一致する。


IgnoreWidthは半角全角の区別をしない比較。カタカナのほかに「ABC」と「ABC」も一致する。
全角半角記述の論争も.NETが解決してくれる、人に優しいオプションw


IgnoreKanaTypeはひらがなとカタカナの区別をしない比較。「ドラえもん」と「ドラエモン」や「どらえもん」が一致する。「スネ夫」と「スネオ」は一致しない。


IgnoreSymbolsは空白文字、句読点、通貨記号などなどを無視する比較。かなり複雑な比較。ここまでくると、何が何やら分からない。MSDNライブラリの説明にも「〜などの記号を無視する」と記述されている。「など」って言われても…。その「など」を知らないと怖くて使えない…。
「cool」と「 c o o l 」や「c o o l」(先頭の空白に注意)が一致する。「cool」と「co%&$#ol」が一致する。


IgnoreNonSpaceの説明はMSDNライブラリより引用。
「文字列比較で、発音区別符など、非スペーシング組み合わせ文字を無視するように指定します。Unicode 標準は、基本文字を組み合わせて生成される新しい文字を組み合わせ文字として定義しています。非スペーシング組み合わせ文字は、表示されるときに文字間隔用の領域は確保しません。非スペーシング組み合わせ文字の詳細については、http://www.unicode.org の「The Unicode Standard」を参照してください。」
Unicodeの知識がないので、私には分かりません、これ。かなり高度な比較です。

「キー」と「キィ」が一致します!
ドイツ語の例(4/11のソースの例)なら「ss」と「\u00df」(エスツェット)が一致します。というのは実はひっかけの誘導で、「ss」と「エスツェット」が一致しないのは CompareOptions.Ordinal 指定のときだけです!「キー」と「キィ」の例は IgnoreNonSpace 指定時のみ一致です。


最後に残ったNone。StringSortはIndexOfでは使えま...あれ、使える例を発見…。おいおいおいおい。

続く