string の IndexOf は .NET4 でもカルチャー依存のまま

昨日の記事は例が悪かったのでわんくまの中さんに正反対に誤読されて残念なので、わかりやすく一覧表にしてみました。

string の StartsWith, EndsWith, IndexOf, LastIndexOf のカルチャー依存/非依存(ordinal)の状況

.NET2〜3.5.1 カルチャー依存
.NET4 CTP ordinal
.NET4 beta1 カルチャー依存 (元に戻した)
.NET4 beta2 カルチャー依存
.NET4 正式版 カルチャー依存 (たぶん)

CTP ではセキュアな変更を行ったものの、互換性のために beta1 以降元に戻されました。
BCL チームによると

UPDATE for .NET 4 Beta 1 In order to maintain high compatibility between .NET 4 and previous releases, we have decided to revert this change. The behavior of String's default partial matching overloads and String and Char's ToUpper and ToLower methods now behave the same as they did in .NET 2.0/3.0/3.5. The change back to the original behavior is present in .NET 4 Beta 1. We apologize for any interim confusion this may cause. We continue to recommend being explicit about the string comparison behavior you want, by always specifying a StringComparison value for the methods on String that accept it.

http://blogs.msdn.com/bclteam/archive/2008/11/04/what-s-new-in-the-bcl-in-net-4-0-justin-van-patten.aspx

だそうです。

ちなみに Silverlight3 は ordinal です。

そしてもう一度書いておくと、BCL Team 曰く「StringComparison パラメータをとるオーバーロードが存在するときはいつでも、このパラメータをとらないオーバーロードの代わりにそれを使ってください。それは、あなたのコードをより明白で維持するのをより簡単にします。」だそうです。
推奨事項は http://blogs.msdn.com/bclteam/archive/2005/06/01/424012.aspx
また、FxCop が指摘してくれるので使うことをおすすめします。
何が危ないの?って問題は昨日の記事を読んでください。

この問題とは別に〇の問題などが修正されているようです。