从XML文件读取数据时,我遇到NullReferenceException
的问题。有时候某些节点不存在,请参阅“Profil”和“Profil' - 我尝试使用??
运算符,但这仅在节点存在时才有效。然后我尝试检查节点是否存在
if([["Kante"]["Profil"]["Profilbreite"] != null)
但是如果例如["Profil"]
不存在,则会抛出异常。
我希望不要将try{}catch()
用于我需要的每一个值。
XmlDocument XMLDoc = new XmlDocument();
XMLDoc.Load(file);
XmlNodeList NL_Stammdaten = XMLDoc.SelectNodes("//*[local-name()='AbwassertechnischeAnlage']");
for (int i = NL_Stammdaten.Count - 1; i >= 0; i--)
{
string Objektbezeichnung = "";
int Profilbreite = 0;
Objektbezeichnung = NL_Stammdaten[i]["Objektbezeichnung"].InnerText ?? ""; //First attempt with the ?? Operator
if (NL_Stammdaten[i]["Objektbezeichnung"] != null) Objektbezeichnung = NL_Stammdaten[i]["Objektbezeichnung"].InnerText ?? ""; //Second attempt with ?? Operator and if(null)
if (NL_Stammdaten[i]["Kante"]["Profil"]["Profilbreite"] != null) Profilbreite = Convert.ToInt32(NL_Stammdaten[i]["Kante"]["Profil"]["Profilbreite"].InnerText ?? ""); //Throws exception if the ["Profil"] -Node dosn't exists in the XML
}
XML文件:
<Data>
<AbwassertechnischeAnlage>
<Objektbezeichnung>113062SE04</Objektbezeichnung>
<Kante>
<KantenTyp>1</KantenTyp>
<Profil>
<Profil>1</Profil>
<Profilbreite>300</Profilbreite>
</Profil>
</Kante>
</AbwassertechnischeAnlage>
<AbwassertechnischeAnlage>
<Objektbezeichnung>113062SE04</Objektbezeichnung>
<Kante>
<KantenTyp>1</KantenTyp>
<!--<Profil></Profil> dosn't exists -->
</Kante>
</AbwassertechnischeAnlage>
</Data>
答案 0 :(得分:1)
使用Null-conditional operator之类的
if (NL_Stammdaten[i]?["Kante"]?["Profil"]?["Profilbreite"] != null)
应该这样做。
用于在执行成员访问(?。)或索引(?[)操作之前测试null。这些运算符可以帮助您编写更少的代码来处理空值检查,尤其是降序到数据结构中。
这意味着您可以简单地链接数组访问器而无需编写大量的空值检查。