XDocument.Load()错误

Joe*_*man 7 c# linq-to-xml

我有一些代码:

WebRequest request = HttpWebRequest.Create(url);
WebResponse response = request.GetResponse();
using (System.IO.StreamReader sr = 
    new System.IO.StreamReader(response.GetResponseStream()))
{
    System.Xml.Linq.XDocument doc = new System.Xml.Linq.XDocument();
    doc.Load(new System.IO.StringReader(sr.ReadToEnd()));
}
Run Code Online (Sandbox Code Playgroud)

我无法在XML文档中加载我的响应.我收到以下错误:

Member 'System.XMl.Linq.XDocument.Load(System.IO.TextReader' cannot be accessed 
with an instance reference; qualify it with a type name instead.
Run Code Online (Sandbox Code Playgroud)

这变得非常令人沮丧.我究竟做错了什么?

Jon*_*eet 13

不像XmlDocument.Load,XDocument.Load是一个返回 new 的静态方法XDocument:

XDocument doc = XDocument.Load(new StringReader(sr.ReadToEnd()));
Run Code Online (Sandbox Code Playgroud)

将流读到最后然后创建一个似乎毫无意义StringReader.首先创建它也毫无意义StreamReader- 如果XML文档不是 UTF-8,它可能会导致问题.更好:

对于.NET 4,存在XDocument.Load(Stream)重载:

using (var response = request.GetResponse())
{
    using (var stream = response.GetResponseStream())
    {
        var doc = XDocument.Load(stream);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于.NET 3.5,没有:

using (var response = request.GetResponse())
{
    using (var stream = response.GetResponseStream())
    {
        var doc = XDocument.Load(XmlReader.Create(stream));
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,只需让LINQ to XML完成所有工作:

XDocument doc = XDocument.Load(url);
Run Code Online (Sandbox Code Playgroud)

编辑:请注意,编译器错误确实为您提供了足够的信息:它告诉您不能调用XDocument.Loadas doc.Load,而是给出类型名称.您的下一步应该是查阅文档,当然这也是示例.