C#可变长度字符串数组

时间:2011-12-13 23:02:08

标签: c# arrays string

基于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。我更喜欢用一个字符串数组来做这个,这样我就可以摆脱所有的if并且只为每个SelectedIndexChanged执行以下操作:

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

但我不确定我是否可以使用字符串的可变长度来执行此操作。我这样做时会出错:

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

有办法做到这一点吗?

谢谢!

3 个答案:

答案 0 :(得分:7)

您已经发现在这种情况下不能使用multidimensional array,因为您的数组具有不同的长度。但是,您可以改为使用jagged array

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

答案 1 :(得分:1)

您可以使用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];

答案 2 :(得分: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]);