Абсолютно субъективный вопрос, даже не знаю, почему я отвечаю на него, но вот что мне кажется более читабельным :
var effects = xElement
.Elements("Effects")
.Elements("Effect")
.Select(e =>
new Effect(
(EffectType)Enum.Parse(
typeof(EffectType),
(string)e.Elements("Type").FirstOrDefault()
),
e.Elements("Options").Any()
? e.Elements("Options").Select(
o => o.Elements("Option").Select(n => n.Value).First()
)
: null
)
)
.ToList();
или если вы предпочитаете синтаксис запроса:
var effects =
from e in xElement.Elements("Effects").Elements("Effect")
let effectType =
(EffectType)Enum.Parse(
typeof(EffectType),
(string)e.Elements("Type").FirstOrDefault()
)
let options =
e.Elements("Options").Any()
? e.Elements("Options").Select(
o => o.Elements("Option").Select(n => n.Value).First()
)
: null
select new Effect(effectType, options);