您可以只使用一個if語句:
if (x == 42)
Foo("yo", a, b, c);
else
Foo("yo", a, b);
您不能使用?:
(至少在函數調用之外),因爲Foo
沒有返回值。 ?:
運營商必須評估一些東西,並且必須將某些東西分配給其他東西。
將擺脫重複的函數調用的另一種選擇是使用的PARAMS一個數組或列表:
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(...)
);
+1對於'List <>'選項:它是最接近問題需要(即使它'他會像他一樣「混亂」 ID)。 –
看到我的編輯,看看爲什麼這不適合我。 PS我知道如何使它工作,我想看看我是否可以輕鬆清楚地工作 - 特別是我想明確表達意圖。我不想使用?:,這只是我第一次嘗試(我立即放棄了) – pm100
@ pm100 ok更新回答 –