您可以只使用 if 语句:
if (x == 42)
Foo("yo", a, b, c);
else
Foo("yo", a, b);
?:
在这种情况下(至少在函数调用之外),您不能使用运算符,因为Foo
它没有返回值。?:
操作员必须对某事进行评估,并且必须将某事分配给其他某事。
摆脱重复函数调用的另一个选项是使用数组或列表作为参数:
var parameters = new List<object> { a, b };
if (x == 42)
parameters.Add(c);
Foo("yo", parameters);
如果你真的想进去?:
,这也行:
Foo("yo", x == 42 ? new object[] { a, b, c } : new object[] { a, b });
对于有关XDocument
/XElement
构造函数调用的更具体的问题,您可能希望使用Add
调用而不是一长串构造函数调用。然后你可以让它们有条件。照原样,我认为您还应该能够通过执行以下操作来完成您的要求:
XElement elementPrecedingOptionalElement = new XElement(...);
var xml = new XDocument(....,
new XElement(...),
new XElement(...),
elementPrecedingOptionalElement,
new XElement(...),
new XElement(...)
);
if (x == 42)
elementPrecedingOptionalElement.AddAfterSelf(new XElement(...));
使用Add
调用看起来像这样:
XDocument xml = new XDocument();
XElement root = new XElement("Root");
xml.Add(root);
root.Add(new XElement("Item1"));
root.Add(new XElement("Item2"));
if (x == 42)
root.Add(new XElement("Item2.5"));
root.Add(new XElement("Item3"));
root.Add(new XElement("Item4"));
实际上,与您所要求的更接近的最后一个版本是这样的,这似乎可行:
var xml = new XDocument(....,
new XElement(...),
new XElement(...),
new XElement(...),
x == 42
? new XElement(...)
: null,
new XElement(...),
new XElement(...)
);