KeyNotFound exception

『Kazzの「JとNの狭間で」』より.

従って.NET1.1で上記のようにインデクサを使用してアクセスしていた辞書をGenericに書換えた場合、存在チェックのコードは以下のどちらかのように書換える必要が出てきます。

状況を整理すると,

  • .NET 1.1 では,Dictionary に格納される value は常に object として扱われていた(のでインデクサが null を返すのもあり).
  • ただしインデクサで null を返すと,「本当に null が格納されていたのか」,「見つからなかったから null を返したのか」がはっきりしない.
  • .NET 2.0 の Generics 版 Dictionary ではインデクサも型付けされるため,参照型値型を返す場合に null が使えない*1

という感じでしょうか.まあ C# 1.0 から C# 2.0 への書き換えで注意すべきというのは確かですな.
ちなみに Visual Studio 2005 で疑問に思ったことは Product Feedback Center で検索してみると結構いい S/N 比で情報が得られるような気がしています.困ったときのおすすめ.上のまとめも Product Feedback Center での検索結果を参考にして作りました.
KeyNotFoundException での検索結果 からいくつかチョイスしてみると,

*1:となるとまあ Nullable の出番なんでしょうけど