Si può semplicemente utilizzare un'istruzione if:
if (x == 42)
Foo("yo", a, b, c);
else
Foo("yo", a, b);
non è possibile utilizzare il ?:
operatore in questo caso (almeno, al di fuori della chiamata di funzione), perché Foo
non ha alcun valore di ritorno. L'operatore ?:
deve valutare qualcosa e che qualcosa deve essere assegnato a qualcos'altro.
Un'altra opzione che sarebbe sbarazzarsi della chiamata di funzione duplicato è quello di utilizzare un array o lista per le params:
var parameters = new List<object> { a, b };
if (x == 42)
parameters.Add(c);
Foo("yo", parameters);
E se si voleva davvero per arrivare ?:
in là, questo dovrebbe funzionare, anche:
Foo("yo", x == 42 ? new object[] { a, b, c } : new object[] { a, b });
per la vostra domanda più specifica sulle chiamate costruttore XDocument
/XElement
, si potrebbe desiderare di utilizzare Add
chiamate piuttosto che una lunga serie di chiamate costruttore. Quindi puoi renderli condizionali. Come è, penso che si dovrebbe anche essere in grado di fare quello che stai chiedendo facendo qualcosa di simile a questo:
XElement elementPrecedingOptionalElement = new XElement(...);
var xml = new XDocument(....,
new XElement(...),
new XElement(...),
elementPrecedingOptionalElement,
new XElement(...),
new XElement(...)
);
if (x == 42)
elementPrecedingOptionalElement.AddAfterSelf(new XElement(...));
Utilizzando Add
chiamate sarebbe simile a questa:
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"));
In realtà, un ultimo la versione che è molto più vicina a quello che stai chiedendo sarebbe come questa, che sembra funzionare:
var xml = new XDocument(....,
new XElement(...),
new XElement(...),
new XElement(...),
x == 42
? new XElement(...)
: null,
new XElement(...),
new XElement(...)
);
+1 per l'opzione 'Elenco <>': è il più vicino a ciò di cui la domanda ha bisogno (anche se è " Sarò "disordinato" come lui sa id). –
vedi la mia modifica per capire perché questo non funziona per me. PS So come farlo funzionare, sto cercando di vedere se riesco a farlo funzionare facilmente e chiaramente - in particolare voglio chiarire l'intento. Non è il mio primo tentativo (che ho subito rinunciato) – pm100
@ pm100 ok risposta aggiornata –