Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 如何获取xml节中的值,如果不存在,则将该值设置为null?_C#_.net_Linq_Xmlreader_Xelement - Fatal编程技术网

C# 如何获取xml节中的值,如果不存在,则将该值设置为null?

C# 如何获取xml节中的值,如果不存在,则将该值设置为null?,c#,.net,linq,xmlreader,xelement,C#,.net,Linq,Xmlreader,Xelement,我有这样一个xml文件: <?xml version="1.0" encoding="utf-8"?> <EffectFile> <Effects> <Effect> <Type>Blur</Type> </Effect> <Effect> <Type>Sharpen</Type> </Effect>

我有这样一个xml文件:

<?xml version="1.0" encoding="utf-8"?>
<EffectFile>
  <Effects>
    <Effect>
      <Type>Blur</Type>
    </Effect>
    <Effect>
      <Type>Sharpen</Type>
    </Effect>
    <Effect>
      <Type>Zoom</Type>
      <Options>
        <Option>88</Option>
        <Option>"miles"</Option>
      </Options>
    </Effect>
  </Effects>
</EffectFile>
xElement.Elements ( "Effects" ).Elements ( "Effect" ).Select (
    e => new Effect (
        ( EffectType ) Enum.Parse ( typeof ( EffectType ), ( string ) e.Elements ( "Type" ).FirstOrDefault ( ) ),
        e.Elements ( "Options" ).Select ( p => ( object ) p.Elements ( "Option" ) ) ) );
new Effect (EffectType type, EffectOptions options)
但是在这个版本中,每个
效果
至少会获得一个空的
效果选项
值。是否有方法指定如果没有
效果的
选项
部分
,则该值应收集为空

Effect
类型具有如下构造函数:

<?xml version="1.0" encoding="utf-8"?>
<EffectFile>
  <Effects>
    <Effect>
      <Type>Blur</Type>
    </Effect>
    <Effect>
      <Type>Sharpen</Type>
    </Effect>
    <Effect>
      <Type>Zoom</Type>
      <Options>
        <Option>88</Option>
        <Option>"miles"</Option>
      </Options>
    </Effect>
  </Effects>
</EffectFile>
xElement.Elements ( "Effects" ).Elements ( "Effect" ).Select (
    e => new Effect (
        ( EffectType ) Enum.Parse ( typeof ( EffectType ), ( string ) e.Elements ( "Type" ).FirstOrDefault ( ) ),
        e.Elements ( "Options" ).Select ( p => ( object ) p.Elements ( "Option" ) ) ) );
new Effect (EffectType type, EffectOptions options)
因此,如果没有
选项
部分,只需将null传递给第二个参数。

只需使用
Any()


老实说,我不明白为什么代码能工作。语句末尾对
对象的强制转换与构造函数所需的参数类型
EffectOptions
冲突。你说得对,我遗漏了一个细节。效果还有一个构造函数,其中第二个参数是IEnumerable options,它被传递给EffectOptions,EffectOptions知道如何将IEnumerable转换为其内部选项列表。谢谢,如果它存在,还会给我多个选项值吗?@Joan:
Any()
只需检查集合中是否至少有一项,其余项通过使用
完成:null
,因此如果至少有一项,则使用您的集合,否则为null非常感谢,这正是我所需要的。@BrokenGlass:这有点不相关,但我现在注意到存储的选项值似乎是System.Xml.Linq.XContainer+d_11类型。因此,我认为我没有在xml文件的选项标记中获得实际值。你知道怎么做吗?我以为p.Elements(“Option”)会分别给我88和“miles”。为什么不把构造函数改为接受
IEnumerable
,而不是
对象
?就我所知,没有理由这么不安全。。。