嗨,这是一个请求支持向XDocument
类添加bool TryParse(string text, out XDocument document)
方法的 RFC 问题。
我已经搜索了 repo,但找不到任何相关的东西,所以如果这是一个骗局,请随时关闭。
有时您必须使用来自_untrusted_ 源的 XML 文件,并且您必须确保该文件实际上是格式正确的 XML。
目前有一些不太好的方法来验证字符串是否是格式良好的 XML,其中涉及异常处理。
没有一个建议的方法看起来像一个非常常见的问题(至少 IMO)的干净解决方案。
另请注意,公开Parse(string source)
方法的其他BCL 类通常也公开bool TryParse(string source, out...)
因此添加TryParse
方法将使XDocument
类与其他 BCL 类。
添加以下方法
bool TryParse(string text, out XDocument document)
到XDocument
和XElement
类
我们是否需要XmlDocument
类的功能对等?
实际上XmlDocument
暴露了一个LoadXml(string xml)
所以我们可以添加一个bool TryLoadXml(string xml, out XmlDocument document)
但我真的不喜欢这个名字,因此如果功能奇偶校验不是必须的,我宁愿不要添加它。
我们对此进行了审查,并没有完全理解在这种情况下添加 TryParse 方法的价值。 虽然与其他 BCL 类型的一致性有点有趣,但它在这些情况下更有用,因为您可能会解析大量它们,因此存在性能问题。 在这种情况下,性能实际上不会成为问题,因为与解析整个 XML 文档的成本相比,异常成本很小。 此外,使用 Parse 方法,您将收到有关错误的 XmlException,它会提供额外的信息,指出您在 TryParse 情况下不会遇到的解析错误。
对于类似的情况,Roslyn API 也不提供解析 CS 文件的 TryParse 方法,因为您通常需要更多有关任何错误的上下文,但即使这样对于解析 XML 文档也可能是多余的,这就是为什么我们在Xml 异常。
感谢您提出问题并将其写出来,但由于这些原因,我们认为向这些添加 TryParse 方法没有多大价值。
@weshaggard ,
除了方便之外, TryParse
方法还允许开发人员跳过与 try / catch 块相关的开销以及实例化他/她甚至可能不关心的不需要的XmlException
。
我也很惊讶地发现不存在这样的方法。 :|
对我个人而言, @weshaggard的答案是 0 有意义。 Imo 所有使用 .NET 超过半年的人都完全了解@weshaggard 帖子第一部分中的解释。 至少在过去的 20 年里,不处理也不关心错误的细节是使用 TryParse() 变体的主要原因,如果该类提供了一个变体。
我认为在过去的 X 年里,很多人已经来到这里,在查看了关于它的 stackoverflow 帖子之后,然后说“哦。XDocument 上真的没有 TryParse()。奇怪。”
但是无所谓。
最有用的评论
@weshaggard ,
除了方便之外,
TryParse
方法还允许开发人员跳过与 try / catch 块相关的开销以及实例化他/她甚至可能不关心的不需要的XmlException
。我也很惊讶地发现不存在这样的方法。 :|