Предполагая, что Opacity
- это свойство экземпляра float
в вашем классе, вы можете объединить троичный оператор (? :) с методом расширения Concat
.
return new XElement("EffectFile",
new XElement("Effects",
this.Effects
.Select(e => new XElement("Effect", e.EffectType))
.Concat(this.Opacity > 0.0f
? new[] { new XElement("Opacity", this.Opacity) }
: Enumerable.Empty<XElement>()
)
)
)
.ToString();
Перевод моих дополнений:
Если непрозрачность больше нуля, создайте новый список размера 1 (с элементом непрозрачности) и добавьте его в список эффектов.Если непрозрачность меньше или равна нулю, создайте новый список с нулевым размером и добавьте его к списку эффектов (в основном это неактивный режим, насколько этот список идет).
Ваш выходной файл будетпохож на тот, который вы указали в своем вопросе, если непрозрачность <= 0, и должен выглядеть так, если он> 0:
<EffectFile>
<Effects>
<Effect>Blur</Effect>
<Effect>Sharpen</Effect>
<Effect>Median</Effect>
<Opacity>0.75</Opacity>
</Effects>
</EffectFile>
Редактировать:
В соответствии с вашими новыми спецификациямипросто измените this.Opacity > 0.0f
на this.Opacity != null
и убедитесь, что у вас есть соответствующий ToString
метод, определенный для Opacity
.Получившийся XML будет выглядеть более или менее одинаково.