Присвоение значений строковому массиву C # на основе параметра - PullRequest
1 голос
/ 17 октября 2011

В C # у меня есть строковый массив значений.Однако, основываясь на параметре, массив не должен включать в себя два значения, а включать все те же другие значения.Как правильно подойти к этому?(Я мог бы использовать список ... но я надеюсь, что есть лучший способ)

Пример кода:

bool msettingvalue=false;
string[] settings;
if(msettingvalue)
    settings = new string[]{
        "setting1","1",
        "setting2","apple",
        "msetting","true"};
else
    settings = new string[]{
        "setting1","1",
        "setting2","apple"};
//code that goes through settings

Как правильно назначить массив для настроек.Все значения будут одинаковыми, так как если значение msetting равно false, оно должно включать определенные настройки.(Вы можете изменить заголовок, если подумаете о лучшем).

Edit1 В идеале, я бы хотел остаться с массивом string [] по сравнению со словарем, так как он быстрее ...и я перебираю массив по порядку, поэтому мне не нужен индекс ключа.

Edit2 Я задал вопрос follow в надежде надля этого есть способ использовать условное выражение.

Ответы [ 4 ]

10 голосов
/ 17 октября 2011

Я твердо убежден, что вместо этого вы должны использовать Dictionary<string, string>.

Тогда вы можете получить:

bool msettingValue = false;
Dictionary<string, string> settings = new Dictionary<string, string> {
    {"setting1", "1"},
    {"setting2", "apple"},
}
if(msettingValue) {
    settings.Add("msetting", "true");
}
1 голос
/ 17 октября 2011

Если вы действительно не хотите использовать словарь, вы можете воспользоваться этой функцией:

    private static string[] AddSettings(ref string[] settings, params string[] SettingsToAdd)
    {                   
        int length = SettingsToAdd.Length;

        if (length%2 !=0)
        {
            throw new ArgumentException("Invalid number of elements");
        }

        int OldLength = settings.Length;
        int NewLength = settings.Length + length;
        Array.Resize(ref settings, NewLength);
        for (int i = OldLength; i < NewLength; i++)
        {
            settings[i] = SettingsToAdd[i - OldLength];
        }
        return settings;
    }

РЕДАКТИРОВАТЬ: Или эта версия, основанная на ответе вашего другого поста:

    private static string[] AddSettings(ref string[] settings, params string[] SettingsToAdd)
    {                   
        int length = SettingsToAdd.Length;

        if (length%2 !=0)
        {
            throw new ArgumentException("Invalid number of elements");
        }
        else
            return settings.Concat(SettingsToAdd).ToArray();
    }

и его использование:

        bool msettingvalue = true;
        string[] settings;
        settings = new string[]{
            "setting1","1",
            "setting2","apple"};
        if (msettingvalue)
        {
            settings= AddSettings(ref settings,"setting1", "value1", "setting2", "value2", "setting3", "value3");
        }

Затем вы можете добавить столько значений, сколько пожелаете, и число должно быть кратным 2, если нет, то выдаетсяисключение

1 голос
/ 17 октября 2011

Вы могли бы пойти с чем-то вроде этого:

Dictionary<string,string> settings = new Dictionary<string,string>();
if (msettingValue) {
   settings["msetting"] = "true";
}
settings["setting1"] = "1";
settings["setting2"] = "apple";
0 голосов
/ 17 октября 2011

Почему бы не собрать массив из общих элементов, а затем добавить дополнительные элементы, если переменная настроек bool имеет значение true?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...