C# XMLReader.Create()和new XMLTextReader()之间的差异
我想了解C# XMLReader.Create()和new XMLTextReader()之间的差异,c#,xml,C#,Xml,我想了解XMLReader.Create和newXMLTextReader()读取XML之间的区别。为什么我要选择一个而不是另一个? 是否存在性能差异 我知道XMLReader是XMLTextReader的一种抽象类型,至少我以前读过,但我看到有人建议使用XMLReader.Create()方法,而不是新的XMLReader()实例 先谢谢你 诚恳地说。XmlReader.Create允许您指定XmlTextReader构造函数重载都不能指定的内容。要了解为什么这类代码会出现的一般答案,您可能需
XMLReader.Create
和newXMLTextReader()
读取XML之间的区别。为什么我要选择一个而不是另一个?是否存在性能差异 我知道XMLReader是XMLTextReader的一种抽象类型,至少我以前读过,但我看到有人建议使用XMLReader.Create()方法,而不是新的XMLReader()实例 先谢谢你
诚恳地说。
XmlReader.Create
允许您指定XmlTextReader
构造函数重载都不能指定的内容。要了解为什么这类代码会出现的一般答案,您可能需要看一下。使用工厂方法和抽象类/接口可以帮助您编写更通用的代码,而不必将自己绑定到特定的实现。这有助于使您的代码更容易利用新功能或在不同情况下使用。Microsoft的答案很简单:
尽管Microsoft.NET Framework在2.0版本中包含XmlTextWriter类,它是XmlWriter类的实现,但建议您使用Create方法创建新的XmlWriter对象。Create方法允许您指定要在创建的XmlWriter对象上支持的功能,还允许您充分利用2.0版本中引入的新功能
但这个答案忽略了最重要的区别:
如果调用“new XmlTextReader”,它将被设置为“v1compat”模式,这将导致它在某些情况下具有非常糟糕的流行为,可能导致OutOfMemoryException!更多信息请参见
建议:除非您真的需要.NET 1.1行为,否则您永远不应该调用“new XmlTextReader”,而应该始终调用“XmlReader.Create”。这似乎不是唯一的区别,我遇到了一个问题,没有设置可以使XmlReader.Create工作,但XmlTextReader工作得很好:哦,是的,而且,在多个环境中发现不平凡的bug真是一件乐事。只是警告一句:工厂模式可能很快变得邪恶并攻击他们的主人。首先,您立即失去了编译时安全性。其次,在许多版本上保持一致性可能会变得非常痛苦。我见过这样的案例(其中一些是我的;-),工厂模式由于系统中的主要设计缺陷而成为必要。不要误解我的意思,我想说的是,在某些情况下,它们可能是隐藏某些内容的最佳方式,但在其他情况下,您只想知道:-)有没有办法将XmlReader置于“v1Compt”模式?默认情况下,XmlTextReader也容易受到XXE攻击,除非您显式设置DtdProcessing=probible。默认情况下,XmlReader已禁用。看见