C#区分例外情况

C#区分例外情况,c#,exception,xmlexception,C#,Exception,Xmlexception,在C语言中,我需要捕获一个XMLException,但我还必须区分它,因为它可以是Xml无效的rootdata,也可以是Xml意外的 我怎样才能做到这一点 我只能在别名为“ResString”的调试器中看到这些字符串 但我希望有多文化的解决方案,所以字符串比较是我希望尽量避免的事情 HRESULT是相同的。如果您查看 您将看到,自始至终,要获得一个(可能是本地化的)错误字符串需要做大量工作,这是newxmleexception的唯一参数 正如您正确地注意到的,如果您需要区分不同的异常条件以做出

在C语言中,我需要捕获一个XMLException,但我还必须区分它,因为它可以是Xml无效的rootdata,也可以是Xml意外的

我怎样才能做到这一点

我只能在别名为“ResString”的调试器中看到这些字符串

但我希望有多文化的解决方案,所以字符串比较是我希望尽量避免的事情

HRESULT是相同的。

如果您查看

您将看到,自始至终,要获得一个(可能是本地化的)错误字符串需要做大量工作,这是
newxmleexception
的唯一参数

正如您正确地注意到的,如果您需要区分不同的异常条件以做出一些编程响应,这完全没有帮助

因为您不想检查字符串——这是一个合理的选择——您最好的选择可能是编写自己的XML解析器,该解析器具有您想要的输出

仔细考虑这种解析器的设计您想要的输出不是结构化XML,而是一份详细的报告,解释为什么它不是合法的XML。例外是处理例外情况的机制;XML解析器的设计者认为格式错误的XML是一种例外情况;他们认为这种情况几乎永远不会发生。由于它几乎从未发生过,而且当它发生时,程序对此无能为力,因此没有动机生成详细的报告,允许根据检测到的错误做出程序决策

但这显然不是你的情况;与XML解析器的设计者的情况相反。您关心错误,并且希望根据不同的错误执行不同的操作,因此解析器的输出应该是错误报告,而不是XML语法树。它不应该抛出异常,因为在您的场景中,格式错误的XML文档并不例外;你期待它


XML不是一种特别难理解和解析的语言(前提是您没有试图解决“此文档是否是此模式的有效实例?”这是一个更难解决的问题),因此您不需要花费很长时间就可以生成一个错误检测词法器和解析器,特别是因为您有现有XML解析器的源代码来指导您。祝你好运

这些差异是否有不同的结果?你可以检查一下。@RufusL:是的,需要不同的操作。@Tom:相同的HRESULT。@RufusL:是的,它总是1,但对于EOF,它也可以是1。XML可以用一行的方式格式化。很好。也许您可以自己在
catch
块中对xml文件进行一些验证,以确定问题所在,但没有任何内置属性。最后,它只是类的一个实例。如果
HResult
InnerException
属性都相同,那么
消息可能是最佳选择。但这可能是本地化的,所以这可能会有问题。你知道在.NET1.0发布之前是否有过这样的情况,他们必须削减这一级别的细节。我开始想,“为什么他们没有呢?”当然,你通常会说这是关于成本/收益分析的。因此,现在我想知道是否有任何好处可以与成本进行权衡。不确定这是否有用,但这些字符串是嵌入在.NET Framework中的名为Res的密封类中的资源。在github上,您可以找到这些字符串的反编译.NET:@madreflection:我在早期没有参与库的设计,因此我对设计师的想法的思考是有根据的猜测。但是,当你对一个设计决策感到疑惑的时候,首先考虑99.9%的情况。绝大多数解析XML文档的开发人员都有一个有效的文档,他们想知道某个特定标记中某个特定属性的值,因为他们正在解决一个业务问题……有趣的见解。我想你不是,但我希望你在编译团队时能学到一些东西。等待0.1%的机会。:)@EricLippert:我记得听说过一个XML解析库,它使用像Roslyn这样的红绿树。这听起来很有希望。我得再找一次。这可能会帮助OP解决这个问题!