2

InvalidEnumArgumentExceptionが Silverlight 4 で廃止されたことに驚きました。

これがなぜなのか誰か知っていますか?これは非常に便利な例外であることがわかりました。特に、バイナリ データを手動で列挙値に逆シリアル化する場合はそうです。

[ObsoleteAttribute(
  "InvalidEnumArgumentException is obsolete. Use ArgumentException instead.")]
public class InvalidEnumArgumentException : Exception
4

1 に答える 1

4

そうです、廃止されたとマークされていますが、完全にそこにあります(クラスのSilverlightバージョンを指す正しいリンクは次のとおりです)

この特定の「なぜ」という質問は、Microsoft で働いておらず、そのような変更のレビュー プロセスに関与している、ここにいるすべての人にとって答えが難しいと思います。Microsoft には、現在のバージョンで廃止とマークする大まかな理由を説明しているドキュメントがおそらくあるでしょう。それは今のままであり、あなたはそれと一緒に暮らさなければならないのではないかと心配しています。

興味がないので、bing で少しググったところ、この SO スレッドは、私が見つけたトピックで最高のヒットでした。Silverlight.netダイで検索しても結果は得られません。したがって、ゴールド パートナー契約 (またはそれが何と呼ばれるものでも) が必要であり、問​​題について Microsoft の担当者に直接連絡する必要があります。

ただし、このまったく同じ例外について少し論争が起こっているようです。それを使用することの良い習慣であるかどうかにかかわらず、矛盾について話しているこのリンクに関するコメントを引用したいと思います。

残念ながら、InvalidEnumArgumentException は mscorlib.dll ではなく System.dll で定義されているため、後者は無効な列挙型引数がメンバーに渡されたときにそれをスローせず、代わりに ArgumentException または ArgumentOutOfRangeException をスローします。ただし、この不一致は通常、問題を引き起こしません。この例外がスローされた場合、通常は呼び出し元のバグを示し、catch 句内で捕捉されることはめったにありません。

そのため、Silverlight からの削除につながる全体的な状況にも影響を与えた可能性があります。か否か。単に ArgumentExceptions をキャッチしている可能性があり、ほとんどの実装はそれをさらに分解しても何も得られないためです。それは単なる推測ですが、これよりも良くなることはないと思います(他のランダムな推測を除いて)。

もちろん、必要に応じて独自の InvalidEnumArgumentException 実装を追加することもできます。すでに行っていると思います。

于 2011-09-28T13:53:07.177 に答える