2012-07-16 67 views
2
private SmtpClient getServer() 
     { 
      return (from e in doc.Elements("emailsetting") 
        select new SmtpClient() 
        { 
         Host = e.Attribute("server").Value, 
         Port = Convert.ToInt32(e.Attribute("port").Value) 
        }).FirstOrDefault(); 
     } 

XML配置文件:为什么这个LINQ抛出NullReferenceException?

<emailsetting> 
    <stmp server="10.182.182.182" port="25" /> 
    <from address="[email protected]"/> 
    <to address=""/> 
    <cc address=""/> 
    </emailsetting> 

为什么抛出异常: 的NullReferenceException是未处理不设置到对象的实例 对象引用。

我是新来的LINQ,PLZ的帮助。

+5

'SMTP' 拼写为XML 'STMP'。 :) – 2012-07-16 09:55:45

回答

5

您只能访问emailsetting元素,该元素没有名为serverport的属性。
您需要获取smtp子元素的属性。

试试这个:

return (from e in doc.Elements("emailsetting") 
     let smtp = e.Element("smtp") 
     select new SmtpClient() 
     { 
      Host = smtp.Attribute("server").Value, 
      Port = Convert.ToInt32(smtp.Attribute("port").Value) 
     }).FirstOrDefault(); 
+1

+1,但只是照顾打字错误:OP的xml示例中有错误的“stmp”而不是“smtp” – 2012-07-16 09:55:01

+0

谢谢。但是LINQ返回一个对象吗?因为当我调用Console.WriteLine(getServer().Host)来测试ip时,它会抛出相同的异常 – DerekY 2012-07-16 09:58:08

+0

@ user838204您是否考虑到了xml中的错字?你写了“stmp”而不是“smtp”。所以你应该改变你的xml使用“smtp”。另外,文件可能为空? – Botz3000 2012-07-16 09:59:29

相关问题