我有以下使用 XML 序列化程序解析的 XML 文件。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Projects>
<Global>
<Variables>
<Variable name="GlobalVar1" value="GV1"/>
<Variable name="GlobalVar2" value="GV2"/>
</Variables>
</Global>
<Project>
<Variables>
<Variable name="LocalVar1" value="LV1"/>
<Variable name="LocalVar2" value="LV2"/>
</Variables>
</Project>
</Projects>
我正在构建一个变量字典 - 名称-值对。我编写了以下 LINQ 语句,它工作正常(假设我在全局和项目范围内没有重复的变量名):
Dictionary<String, String> varDict = Projects.Global.Variables.Select(var => new { var.name, var.value })
.Union(Projects.Project.Variables?.Select(var => new { var.name, var.value }))
.ToDictionary(var => var.Key, var => var.value);
现在我有一个转折 - 有时整个<Global>
标签都会丢失,或者它不会有<Variables>
标签。同样,有时<Variables>
标签中会缺少<Project>
标签。例如:XML 文件将是:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Projects>
<Project>
<Variables>
<Variable name="LocalVar1" value="LV1"/>
<Variable name="LocalVar2" value="LV2"/>
</Variables>
</Project>
</Projects>
我认为?.
如下使用运算符(空条件)会有所帮助,但是当<Global>
标签丢失时,以下 LINQ 语句会返回null
(varDict
is null
):
Dictionary<String, String> varDict = Projects.Global?.Variables?.Select(var => new { var.name, var.value })
.Union(Projects.Project.Variables?.Select(var => new { var.name, var.value }))
.ToDictionary(var => var.Key, var => var.value);
我做错了什么或解决方案是什么?