można po prostu użyć instrukcji if:
if (x == 42)
Foo("yo", a, b, c);
else
Foo("yo", a, b);
Nie można używać ?:
operator w tym przypadku (przynajmniej poza wywołaniem funkcji), ponieważ Foo
nie ma wartości zwracanej. Operator ?:
musi ocenić coś, a to coś musi być przypisane do czegoś innego.
Innym rozwiązaniem, które pozbyć duplikatu wywołania funkcji jest użycie tablicy lub listy dla params:
var parameters = new List<object> { a, b };
if (x == 42)
parameters.Add(c);
Foo("yo", parameters);
A jeśli naprawdę chciał dostać ?:
tam, to będzie działać również:
Foo("yo", x == 42 ? new object[] { a, b, c } : new object[] { a, b });
dla bardziej konkretne pytanie o XDocument
/XElement
wywołań konstruktorów, może chcesz używać Add
połączenia zamiast jednego długą serię rozmów konstruktora. Następnie możesz je uzależnić. Jak to jest, myślę, że powinien również być w stanie robić to, co pytasz robiąc coś takiego:
XElement elementPrecedingOptionalElement = new XElement(...);
var xml = new XDocument(....,
new XElement(...),
new XElement(...),
elementPrecedingOptionalElement,
new XElement(...),
new XElement(...)
);
if (x == 42)
elementPrecedingOptionalElement.AddAfterSelf(new XElement(...));
Korzystanie Add
połączeń będzie wyglądać mniej więcej tak:
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"));
Faktycznie, jeden ostatni Wersja, która jest znacznie bliższa temu, o co prosisz, byłaby podobna do tej, która wydaje się działać:
var xml = new XDocument(....,
new XElement(...),
new XElement(...),
new XElement(...),
x == 42
? new XElement(...)
: null,
new XElement(...),
new XElement(...)
);
+1 dla opcji 'Lista <>': jest najbliżej tego, czego potrzebuje pytanie (nawet jeśli " Będzie "niechlujny" jak on ID). –
zobacz moją edycję, aby zobaczyć, dlaczego to nie działa dla mnie. PS Wiem, jak to działa, staram się sprawdzić, czy mogę sprawić, by działało to łatwo i wyraźnie - w szczególności chcę jasno wyrazić zamiar. Nie używam tego?:, To była moja pierwsza próba (od razu się poddałem) – pm100
@ pm100 ok zaktualizowana odpowiedź –