2012-07-16 4 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을 throw합니까?

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

왜 예외가 발생합니다 : NullReferenceException이 처리되지 않은 개체의 인스턴스로 설정되지 않았습니다 개체 참조했다.

저는 LINQ, plz help를 (를) 처음 사용했습니다.

+5

'SMTP'는 XML에서 'STMP'로 철자가. :) –

답변

5

또는 port이라는 속성이없는 emailsetting 요소에만 액세스하고 있습니다.
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 샘플에서 "smtp"대신 "stmp"가 잘못되었습니다 –

+0

감사합니다. 그러나 LINQ가 개체를 반환합니까? 원인 Console.WriteLine (getServer(). Host)을 호출하여 IP를 테스트하면 동일한 예외가 throw됩니다. – DerekY

+0

@ user838204 xml의 오타를 고려 했습니까? 당신은 "smtp"대신에 "stmp"라고 썼다. 따라서 "smtp"를 사용하도록 XML을 변경해야합니다. 또한, doc 가능성이 null입니까? – Botz3000

관련 문제