我的代码中有几个地方,它抛出一个新的System.Xml.XmlException似乎是合适的。我可以做到
throw new XmlException("Your XML sucks go fix it then try again.");
但我认为最好尽可能地利用特殊于异常类的成员(否则你每次都可能抛出一个简单的“Exception
”)。 SourceUri和LineNumber会有所帮助,但是他们只有有get
个方法,我无法为它们分配值!只有3个构造函数重载,它们中没有一个具有这些成员的参数;我只能初始化Message
,没有别的。
必须有一些方法用值填充这些数据成员,否则为什么XmlException会烦恼呢?
我想我可以创建一个继承XmlException的新类,并编写一个初始化SourceUri等的新构造函数但仍然必须有一种方法来使用XmlException。正确?
答案 0 :(得分:2)
是 a constructor with the line number and line position。我看不到任何需要SourceUri的东西......
我相信你可以使用序列化流媒体上下文填充它 - 但这将非常脆弱。
我认为最好将它视为仅由系统抛出的XmlExceptions提供的东西。我不认为这会使它变得无用 - 只是不那么灵活。 (我怀疑世界上抛出的绝大多数XmlExceptions都是由系统而不是用户代码抛出。)
答案 1 :(得分:1)
有一个构造函数采用sourceUri
参数:
internal XmlException(string res, string[] args, string sourceUri)
但由于它是内部的,因此只能在System.Xml程序集中调用它。无论如何,我认为你不应该自己抛出XmlException
。此异常通常由与XML相关的BCL类抛出。您应该创建自己的异常并将其抛出。
答案 2 :(得分:0)
我看了一下使用Reflector,似乎只有两个构造函数设置了SourceUri。这些是反序列化的,以及设置所有内容的单个内部构造函数,但是所有公共构造函数都将SourceUri设置为null。显然,这些都不容易被访问。我会得出结论,没有好的方法来设置SourceUri属性。