如果XmlException.SourceUri是只读的,它有什么用处?

时间:2010-05-14 17:01:59

标签: c# get-method xmlexception

我的代码中有几个地方,它抛出一个新的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。正确?

3 个答案:

答案 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属性。