- XML code
[code=C#]
<main>
<texte>Accès refusé</texte>
<errcode>2</errcode>
<url></url>
</main>
[/code]
上面就是个例子,是拒绝访问。
- C# code
XDocument xmlsociete = XDocument.Parse(DataXML); var societe = from str in xmlsociete.Descendants("main") select new Societe() { nosiret = str.Element("no").Value, deno = str.Element("deno").Value, adresse = str.Element("adresse").Value, codepostal = str.Element("codepostal").Value, commune = str.Element("commune").Value, struri = str.Element("url").Value, lstdirig=new List<Dirigeant>(), lstevenement=new List<Evenement>(), };
上面是我的linq的代码部分,如果那个xml中还有这个str.Element("no").Value等等,当然可以生成societe,而且我可以得到xml的数据,但现在如果像上面那段xml,我是得不到societe的,这样我使用下面的代码就会出错
C# code
Societe soc=societe.ToArray<Societe>()[0];
所以我想在这条代码前加一个判断,判断var societe中存不存在Societe的实体,我试过societe==null,试过societe.count()==0,但都不好使都会出现一个错误La référence d'objet n'est pas définie à une instance d'un objet.,我的vs是法语版的,翻译过来应该是,这个reference没有定义一个societe的实体,所以请大家帮看看如何判断。
------解决方案--------------------
楼主你的错误在这里 nosiret = str.Element("no").Value,
str.Element("no") 已经是null了,str.Element("no").Value 自然会抛出异常。
你需要考虑到XML不包含no节点的时候,怎么初始你的Societe类,比如象下面这样
- C# code
var societe = from str in xmlsociete.Descendants("main") select new Societe() { nosiret = str.Element("no") == null ? "" : str.Element("no").Value, };