20

おそらく.netでも興味深いバグを見つけました(これはまだモノで試していません)。

IndexOf()文字列インスタンスのメソッドが、特定の特殊記号に対して符号付きの値 (-1 以下) を返している。

たとえば、いくつかの特殊な Unicode 文字を含む文字列があり、この文字列内のどこかに探していたコロンがありました。返された符号付きの値Calling IndexOf(" :")が確実に含まれる行の場合" :"

この文字列をここに貼り付けようとしますが、特殊な記号を考えると難しいかもしれません:

hitchcock.freenode.net 322 petan #hobbiton 5 :ˁ˚ᴥ˚ˀ > Good luck axa!

これを回避する方法はありますか?

4

2 に答える 2

10

これはBCL ブログに記載されています

IndexOf()デフォルトでカルチャ不変の比較を行います。

特にこれに注意してください:

.NET 4 Beta 1 の更新 .NET 4 と以前のリリースとの高い互換性を維持するために、この変更を元に戻すことにしました。String のデフォルトの部分一致オーバーロードと、String および Char の ToUpper メソッドと ToLower メソッドの動作は、.NET 2.0/3.0/3.5 と同じように動作するようになりました。元の動作への変更は、.NET 4 Beta 1 に存在します。これにより一時的な混乱が生じる可能性があることをお詫び申し上げます。 StringComparison 値を受け入れる String のメソッドに対して常に StringComparison 値を指定することにより、必要な文字列比較動作について明示することを引き続きお勧めします。

String.IndexOf Method (String, Int32, StringComparison)オーバーロードを使用する必要があります。

例えば:

IndexOf(":", StringComparison.Ordinal);
于 2013-07-10T14:53:13.100 に答える
9

なんらかの理由でこの質問を閉じたいと思う人もいるので、それが起こる前に答えます:-)

@vcsjones によるコメントの回答のおかげで、ロケール設定に関連しているようで、変更することで修正できます

text.IndexOf(" :")

text.IndexOf(" :", StringComparison.Ordinal)

これは悪い答えかもしれませんが、何もないよりはましです...

于 2013-07-10T14:42:34.683 に答える