【发布时间】:2011-07-05 23:48:21
【问题描述】:
我有一个这样的 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" ) ) ) );
但是在这个版本中,每个Effect 至少会得到一个空的EffectOptions 值。有没有办法指定如果Effect 没有Options 部分,则该值应收集为空?
Effect 类型有这样的构造函数:
new Effect (EffectType type, EffectOptions options)
如果没有Options 部分,则只想将 null 传递给第二个参数。
【问题讨论】:
-
说实话,我不明白,为什么代码完全有效。语句末尾对
object的强制转换与构造函数所需的参数类型EffectOptions冲突。 -
你说得对,我遗漏了一个细节。发生的情况是 Effect 也有一个构造函数,其中第二个参数是 IEnumerable
标签: c# .net linq xmlreader xelement