Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq元素与类_C#_Linq_Xelement - Fatal编程技术网

C# Linq元素与类

C# Linq元素与类,c#,linq,xelement,C#,Linq,Xelement,所以,让我解释一下我的烦恼 我得到一个由另一个人开发的项目,他离开了公司。现在我必须更新程序,但导入解决方案时出现了问题 让我们看看代码: ListeDeTypeDePoste = (from e in xml.Descendants("profil") select new TypeDePoste() {

所以,让我解释一下我的烦恼

我得到一个由另一个人开发的项目,他离开了公司。现在我必须更新程序,但导入解决方案时出现了问题

让我们看看代码:

  ListeDeTypeDePoste = (from e in xml.Descendants("profil")
                              select new TypeDePoste()
                              {
                                  Nom = e.Element("name").Value,
                                  Chaines = (from c in e.Elements("Chaine")
                                             select new Chaine()
                                             {
                                                 Code = c.Element("Code")?.Value,
                                                 Type = c.Element("Type")?.Value,
                                                 Nom = c.Element("Nom")?.Value,
                                                 OU = c.Element("OU")?.Value
                                             }).ToList()
                              }).ToList<TypeDePoste>();
问题在于Chaine类中每个属性的。?值,当我调试时,我甚至可以调试解决方案,如果我删除它们,我会得到一个NullReferenceException。有了这段代码,以前的realese.exe就像一个符咒一样工作

您可以使用操作符吗?。只有在c6.0中

这是空传播运算符。如果不想使用它,可以将指定更改为Chaine类的属性:

如果删除?在该运算符中,赋值将崩溃,因为您试图获取null值

如果c.ElementCode为null,则此代码将简单地将null分配给代码:

Code = c.Element("Code")?.Value;
但是没有

这是因为该代码中的元素调用有时返回null,因为您正在处理的XML文档中的该位置不存在具有给定名称的元素

那个?。运算符对此进行测试,在这种情况下返回null

如果你使用。相反,如果不添加您自己的null检查,那么在这种情况下将抛出NullReferenceException。这是C语言设计的


空条件运算符为,因此要使用它,您需要安装Visual Studio 2015。

问题出在哪里?您的问题是什么?如果对于其中一个c元素。。。它返回空值,然后删除?。然后它当然会抛出一个NullReferenceException。
Code = c.Element("Code")?.Value;
Code = c.Element("Code").Value; //app will throw an exception because c.Element("Code") is null