c#可变长度字符串数组

本文关键字:字符串 数组 | 更新日期: 2023-09-27 18:17:41

基于comboBox1的选择,我填充comboBox2。comboBox2具有可变数量的列表项。目前我是这样手动做的:

string[] str1 = { "item1", "item2" }
string[] str2 = { "item1", "item2", "item3" , "item4" }

等。

if (cbox1.SelectedIndex == 0)
{
       cbox2.Items.AddRange(str1);
}
if (cbox1.SelectedIndex == 1)
{
       cbox2.Items.AddRange(str2);
}

等。

虽然这工作,我有4个下拉框和13个可能的选择每个事件。这就产生了很多"如果"。我更愿意使用字符串数组来实现这一点,这样我就可以摆脱所有的if,并为每个SelectedIndexChanged执行以下操作:

cbox2.Items.AddRange(str[cbox1.SelectedIndex]);

,但我不确定我是否可以做到这一点与字符串的可变长度。当执行

时,我得到错误
string[,] str = { { "Item1", "Item2"},{"Item1", "Item2", "Item3", "Item4"} };

有办法做到这一点吗?

谢谢!

c#可变长度字符串数组

您已经发现在这种情况下不能使用多维数组,因为数组的长度不同。但是,您可以使用锯齿数组来代替:

string[][] str =
{
    new string[] { "Item1", "Item2" },
    new string[] { "Item1", "Item2", "Item3", "Item4" }
};

您可以使用Dictionary并将您的SelectedIndex值映射到字符串数组(甚至更好,IEnumerable<string>):

IDictionary<int, string[]> values = new Dictionary<int, string[]>
                                 {
                                    {0, new[] {"item1", "item2"}},
                                    {1, new[] {"item3", "item4", "item5"}},
                                 };
...
string[] items = values[1];

您也可以使用字典来实现您的目标:

Dictionary<int, string[]> itemChoices = new Dictionary<int,string>()
{
    { 1, new [] { "Item1", "Item2" }},
    { 2, new [] { "Item1", "Item2", "Item3", "Item4" }}
};

你可以简单地调用:

cbox1.Items.AddRange(itemChoices[cbox1]);
cbox2.Items.AddRange(itemChoices[cbox2]);