簡體   English   中英

根據參數將值分配給C#字符串數組

[英]Assigning values to C# string array based on parameter

在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我問了一個后續問題,希望有一種使用內聯條件的方法。

我強烈認為您應該改用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<string,string> settings = new Dictionary<string,string>();
if (msettingValue) {
   settings["msetting"] = "true";
}
settings["setting1"] = "1";
settings["setting2"] = "apple";

如果您確實不想使用字典,則可以使用以下功能:

    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的倍數,否則,將引發異常

為什么不使用公共元素構建數組,如果bool settings變量為true,則添加額外的內容?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM