C# WPF:对象引用未设置为对象的实例

C# WPF:对象引用未设置为对象的实例,c#,wpf,xmlnode,C#,Wpf,Xmlnode,我正在使用WPF访问此方法。我知道当从外部方法访问对象时,我应该使用调度器。或者“节点”是一个局部变量,它给了我: 对象引用未设置为对象的实例 为什么? 代码如下: SpeechSynthesizer valery = new SpeechSynthesizer(); XmlDocument xmlNews = new XmlDocument(); xmlNews.Load(string.Format("http://news.google.com/news?pz=1&cf=all&am

我正在使用WPF访问此方法。我知道当从外部方法访问对象时,我应该使用调度器。或者“节点”是一个局部变量,它给了我:

对象引用未设置为对象的实例

为什么?

代码如下:

SpeechSynthesizer valery = new SpeechSynthesizer();
XmlDocument xmlNews = new XmlDocument();
xmlNews.Load(string.Format("http://news.google.com/news?pz=1&cf=all&ned=us&hl=en&topic=tc&output=rss"));
foreach (XmlNode node in xmlNews.SelectNodes("/rss/channel/item"))
{
    valery.Speak(node.SelectSingleNode("/title").InnerXml);
}

老实说,我怀疑
node.SelectSingleNode
返回null,这意味着尝试调用
InnerXml
会触发异常

尝试进行以下更改:

foreach (XmlNode node in xmlNews.SelectNodes("/rss/channel/item"))
{
    var titleNode = node.SelectSingleNode("/title");

    if (titleNode != null && !string.IsNullOrEmpty(titleNode.InnerXml))
        valery.Speak(titleNode.InnerXml);
}
我也在
InnerXml
上进行了检查,以防
Speak
不能接受空字符串


我最初并不怀疑XPath,因为如果XPath找不到任何内容,这些方法将返回空集合而不是空项。

去掉正斜杠,然后重试。见下文:

SpeechSynthesizer valery = new SpeechSynthesizer();
XmlDocument xmlNews = new XmlDocument();
xmlNews.Load(string.Format("http://news.google.com/news?pz=1&cf=all&ned=us&hl=en&topic=tc&output=rss"));
foreach (XmlNode node in xmlNews.SelectNodes("/rss/channel/item"))
{
    valery.Speak(node.SelectSingleNode("title").InnerXml);
}

这对我有效

是否将
xmlNews
分配给任何对象?这同样适用于
valery
XmlDocument xmlNews=newxmldocument();SpeechSynthesizer valery=新的SpeechSynthesizer()
valery
可以为空,
xmlNews
可以为空,
节点的结果可以为空。选择SingleNode
可以为空。老实说,我怀疑是最后一个,这意味着试图调用
InnerXml
触发了异常。你是对的!node.SelectSingleNode返回null我将代码更改为foreach(xmlNews.SelectNodes(“/rss/channel/item/title”)并按照我的要求工作!谢谢