在可移植类库中实现自定义异常

18

在设计.NET自定义异常时,MSDN提供了这些准则。特别是,准则指出自定义异常应该:

  • 可序列化,即实现ISerializable并被装饰使用[Serializable]属性,并且
  • 应该实现(反)序列化构造函数,即protected CustomException(SerializationInfo info, StreamingContext context)

然而,在可移植类库中,既不支持SerializableAttribute,也不支持ISerializableSerializationInfo

如何在同时针对.NET Framework和一个或多个平台的可移植类库中充分设计自定义异常?

1个回答

18

基本上,忽略那个指导 - 那是针对完整的.NET,不适用于可移植类库项目。实际上,如果我们看一下(比如)Silverlight(包括WP7),我们可以看到:

[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
public class Exception

坦白说,那个要求的主要消费者是远程调用...而现在需求不是很大。


非常感谢您的澄清,马克。我怀疑这就是情况(例如,指导尚未更新为.NET 4.5),但从可靠的来源得到确认会更加保险。 - Anders Gustafsson
1
@Anders 我已经在“社区内容”部分添加了一些注释 - 它们可能会出现。 - Marc Gravell
1
有些内容是在运行时强制执行的。例如,如果您尝试向Exception.Data集合中添加某些内容,则在完整的Framework上会引发异常,但在Silverlight上不会。 - John Gietzen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接