C # встроенное условие в массиве string [] - PullRequest
10 голосов
/ 17 октября 2011

Как вы могли бы сделать следующее встроенное условие для массива string [] в C #. Основываясь на параметре, я хотел бы включить набор строк ... или нет. Этот вопрос является продолжением этого вопроса на stackoverflow .

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

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

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

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

Ответы [ 2 ]

21 голосов
/ 17 октября 2011
settings = new string[]{"setting1","1", "setting2","apple"}
    .Concat(msettingvalue ? new string[] {"msetting","true"} : new string[0]);
    .ToArray()
5 голосов
/ 17 октября 2011

используйте общий 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...