2

我惊讶地发现InvalidEnumArgumentExceptionSilverlight 4 中已经过时了。

有人知道为什么吗?我发现这是一个非常有用的例外,尤其是在手动将二进制数据反序列化为枚举值时。

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

1 回答 1

4

你是对的,它被标记为过时但完全存在(这里是指向类的 Silverlight 版本的正确链接

我认为这个特殊的“为什么”问题对于这里的每个人来说都很难回答,他们不是在微软工作并参与审查这些变化的过程。Microsoft 可能有某种文档解释了在当前版本中将其标记为过时的高级原因。就像现在一样,我担心你可能不得不忍受它。

出于兴趣,我用 bing 搜索了一下,这里的这个 SO 线程是我能找到的关于该主题的最佳选择。即使在Silverlight.net上查找它也不会产生任何结果。因此,要么您需要一份黄金合作伙伴合同(或其他任何名称),然后就该问题直接联系 Microsoft 的人员。

然而,对于这个相同的异常似乎有点争议,无论是否使用它的好习惯,我想在这个链接上引用一个评论,谈论不一致:

不幸的是,由于 InvalidEnumArgumentException 是在 System.dll 而不是 mscorlib.dll 中定义的,因此后者在将无效的枚举参数传递给成员时不会抛出它,而是会抛出 ArgumentException 或 ArgumentOutOfRangeException。然而,这种不一致通常不会产生问题,因为当抛出这个异常时,通常表示调用者中存在错误,并且很少在 catch 子句中捕获。

因此,这也可能影响了导致将其从 Silverlight 中删除的整个情况。或不。也许只是因为他们认为它不需要开销,可以这么说,因为您可能无论如何都在捕获 ArgumentExceptions,并且大多数实现都没有通过进一步分解它来获得任何收益。这只是一个猜测,但恐怕你不会得到比这更好的(除了其他随机猜测)。

如果您愿意,您当然可以添加自己的 InvalidEnumArgumentException 实现,我猜您已经这样做了。

于 2011-09-28T13:53:07.177 回答