危険な挙動 IndexOf

TKFP.DLLの不具合を調べていたら恐ろしい事実に気付いてしまいました。.NET FrameworkのIndexOf関数がカルチャに影響されるらしい。具体的には
"xxドラエモン".IndexOf("ト゛ラ")
の結果が「-1」では無く「2」なってしまいます。
今回、不具合が発生したのは
"/ー".IndexOf("//")
が「-1」にならなかったことです。
.NET 2.0 ではまだIndexOfに比較オプションが指定できるので比較的簡単に回避できたのですが、.NET 1.1ではそれが使えずに
System.Globalization.CultureInfo.CurrentCulture.CompareInfo.IndexOf
などと言う、関数を使う羽目になりました。
今更、.NET 1.1での影響はほとんど無いのですが、TKFP.DLLでは両バージョンを同一のソースで管理しているので、おかげでコンパイルオプションだらけです。

他にも、StartsWith とか EndsWith とかも影響するようなのでちょっと見直す必要がありそうです。ContainsとかReplaceが影響しないのがさらに混乱するんですけどね。

そもそも、この仕様ってどうなんでしょう?あいまいな日本語比較より厳密な文字比較をする場面のほうが圧倒的に多いような気がするので、あいまい比較をオプションにするべきだと思うのですが。

トラックバック(0)

このブログ記事を参照しているブログ一覧: 危険な挙動 IndexOf

このブログ記事に対するトラックバックURL: http://uwa.potetihouse.com/mt/mt-tb.cgi/230

コメントする


画像の中に見える文字を入力してください。

2009年11月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30