根据参数为c#字符串数组赋值

本文关键字:字符串 数组 赋值 参数 | 更新日期: 2023-09-27 18:11:30

在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

给数组赋值的正确方法是什么?所有的值都是一样的,如果msettingvalue为false,它应该包含某些设置。(如果你想到一个更好的标题,你可以改变标题)。

Edit1 理想情况下,我希望使用string[]数组而不是字典,因为它更快……我按顺序遍历数组所以我不需要键索引

Edit2 我问了一个后续问题,希望有一种方法可以使用内联条件。

根据参数为c#字符串数组赋值

我强烈建议您使用Dictionary<string, string>

那么你可以:

bool msettingValue = false;
Dictionary<string, string> settings = new Dictionary<string, string> {
    {"setting1", "1"},
    {"setting2", "apple"},
}
if(msettingValue) {
    settings.Add("msetting", "true");
}

如果你真的不想使用dictionary,你可以使用这个函数:

    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的倍数,如果不是,则抛出异常

你可以这样写:

Dictionary<string,string> settings = new Dictionary<string,string>();
if (msettingValue) {
   settings["msetting"] = "true";
}
settings["setting1"] = "1";
settings["setting2"] = "apple";

为什么不使用公共元素构建数组,然后添加额外的东西,如果bool设置变量为真?