我很惊讶地发现{4}已经在Silverlight 4中被淘汰了。
有谁知道这是为什么?我发现这是一个非常有用的例外,特别是在手动将二进制数据反序列化为枚举值时。
[ObsoleteAttribute(
"InvalidEnumArgumentException is obsolete. Use ArgumentException instead.")]
public class InvalidEnumArgumentException : Exception
答案 0 :(得分:4)
你是对的,它被标记为过时但完全存在(这里是the correct link pointing to the Silverlight Version of the class)
我认为这个特殊的“为什么”这个问题很难为这里的每个人解答,他们不是在微软工作,而是参与审查这些变化的过程。 Microsoft可能会提供某种文档,说明在当前版本中将其标记为过时的高级原因。就像现在一样,我担心你可能不得不忍受它。
出于intereset,我用bog搜索了一下这个SO线程在这里是我能找到的主题上最好的。即使在Silverlight.net上寻找它也不会产生任何结果。因此,要么您需要黄金合作伙伴合同(或其他任何合同),请直接与Microsoft的人联系。
然而,在这个相同的例外情况下似乎有一点控制,不管它是否使用它的良好做法,我想引用对此link的评论,谈论不一致:
不幸的是,由于定义了InvalidEnumArgumentException System.dll而不是mscorlib.dll,以后不会抛出它 无效的枚举参数传递给成员,而是抛出 ArgumentException或ArgumentOutOfRangeException。这种不一致 但是,通常不会出现问题,因为这个例外,当时 抛出,通常表示调用者中的错误,很少被捕获 在一个捕获条款中。
因此,这可能也会影响到导致从Silverlight中删除它的整个环境。或不。也许只是因为他们认为这是不必要的开销,所以说,因为你可能无论如何都在捕捉ArgumentExceptions,而且大多数的实现都没有通过进一步分解来获得任何收益。这只是猜测,但我担心你不会比这更好(除了其他随机猜测)。
如果您愿意,您当然可以添加自己的InvalidEnumArgumentException实现,我猜您已经这样做了。