Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';在XmlReader类中,`ReadString`和`ReadContentAsString`之间的区别是什么?_C#_.net_Xmlreader - Fatal编程技术网

C# 什么';在XmlReader类中,`ReadString`和`ReadContentAsString`之间的区别是什么?

C# 什么';在XmlReader类中,`ReadString`和`ReadContentAsString`之间的区别是什么?,c#,.net,xmlreader,C#,.net,Xmlreader,我注意到在一些开源代码中,使用System.Xml.XmlReader.ReadString()解析Xml。但是,当我试图在控制台应用程序中使用它来检查它时(我天生就是个好奇的女孩),当我对XmlReader类实例变量按下时,我没有得到任何智能感知 我非常感兴趣,并使用ILDASM检查了MSIL。这时我注意到这个类方法用 [EditorBrowsable(EditorBrowsableState.Never)] 还注意到我对ReadString()的调用已转换为另一个名为ReadContentA

我注意到在一些开源代码中,使用
System.Xml.XmlReader.ReadString()
解析Xml。但是,当我试图在控制台应用程序中使用它来检查它时(我天生就是个好奇的女孩),当我对
XmlReader
类实例变量按下
时,我没有得到任何智能感知

我非常感兴趣,并使用ILDASM检查了
MSIL
。这时我注意到这个类方法用

[EditorBrowsable(EditorBrowsableState.Never)]

还注意到我对
ReadString()
的调用已转换为另一个名为
ReadContentAsString
的方法。我在MSDN上找不到关于微软程序员为什么做出这个决定的文档

有人吗?我真的很想知道,以便在我的生产代码中调用正确的方法


另外,我也不希望任何未来的开发人员看到我的代码时把我当成傻瓜,因为我是一个女孩和一个开发人员(我在一个高度男性主导的职业中看到的罕见组合;)

你应该先阅读两个函数的官方文档:

:

以字符串形式读取元素或文本节点的内容。但是,我们建议您改用该方法,因为它提供了一种更直接的方法来处理此操作

:

将当前位置的文本内容作为
字符串
对象读取

ReadString()
仅适用于两种类型的节点文本和元素-
ReadContentAsString()
处理大量的节点文本和元素,包括CDATA、空格和注释,但不处理元素!我认为后一种方法会使泛型化变得混乱,它处理不同节点类型的规则和读取需要在元素内部而不是在开始时。

我认为> ReadStReg()/Case>更方便的方法是因为只需要在元素的起始位置对阅读器进行定位以读取其内容。我认为使用的建议是不合理的,因为推荐的方法:

读取开始标记和元素的内容,并将读取器移过结束元素标记

如您所见,它是不对称的,会自动跳过结束标记,将读卡器放在后面的节点上。这种行为很容易破坏某些简单的模式,例如选择性阅读扫描。考虑下面的代码,它扫描XML文件中的“单元格”元素序列,并只读取具有某个属性的内容,这些值设置为值<代码> Read!<代码>

string attrib;
string content;
while( NextCell( reader, out attrib ) )
{  if( attrib != "ReadMe!" ) continue;
    ReadCell( reader, out content );
}

在我的例子中,
NextCell()
在单元格元素的开头离开读卡器,或者返回false
ReadCell()
始终将读卡器保留在上次读取的单元格元素的结束标记处。它使用
ReadString()。如果它使用了
ReadElementContentAsString()
读卡器将留在下一个单元格的开头,而
NextCell()
将跳过它跳转到它后面的单元格。

似乎会问同样的问题,但包括原因的推理。您能否解释一下您正在尝试做什么(即,是什么提示了这个问题)?