С# inline условно в массиве string []

Как вы можете сделать следующее inline условное для массива string [] в С#. Основываясь на параметре, я хотел бы включить набор строк... или нет. Этот вопрос является продолжением qaru.site/info/524554/....

        //Does not compile
        bool msettingvalue=false;
        string[] settings;
        if(msettingvalue)
            settings = new string[]{
                "setting1","1",
                "setting2","apple",
                ((msettingvalue==true) ? "msetting","true" :)};

Если значение msettingvalue истинно, я хотел бы включить две строки: "msetting", "true": иначе строки не будут.

Edit1 Это не должно быть ключевой парой значений... что, если бы было добавлено 5 строк (или не быть)... Я не думал, что это будет сложно.

(Также... может ли кто-то с достаточной репутацией сделать "встроенный-условный" или "условно-встроенный" тег?)

Ответ 1

settings = new string[]{"setting1","1", "setting2","apple"}
    .Concat(msettingvalue ? new string[] {"msetting","true"} : new string[0]);
    .ToArray()

Ответ 2

используйте общий List<String>

bool msettingvalue=false;
string[] settings;
var s = new List<String>();
s.AddRange({"setting1","1","setting2","apple"});
if(msettingvalue)
    s.AddRange({"msetting","true"});
settings = s.ToArray();

Но... из внешнего вида вашего массива вам будет лучше использовать другую структуру для хранения этих вещей. Это ассоциативный массив, который вы хотите. Вы можете использовать Tuple или Dictionary для моделирования параметров таким образом, чтобы их было легче обрабатывать, и это более точно отражает семантику.

bool msettingvalue=false;
var settings = new Dictionary<String,String>();
settings.Add("setting1","1");
settings.Add("setting2","value2");
if(msettingvalue)
    settings.Add({"msetting","true");

... могут быть даже две последние строки.

settings.Add({"msetting",msettingvalue.ToString());