3

我想弄清楚一些事情。我有一种将一些项目添加到ComboBox名为“cbSize”的方法。我意识到如果我在其中添加两种类型的数据,代码会崩溃。这是因为 aComboBox只能容纳一种类型的数据吗?

items.Add(1);
items.Add(10);
items.Add(100);
items.Add(2);
items.Add(20);
items.Add(3);
items.Add(30);       //works fine if add numbers only

//items.Add("4");    //will crash if mix both numbers and text
//items.Add("2");    //works fine if add text only

//then sort them out
items.Sort();

//now clear original cbSize items
cbSize.Items.Clear();

//and add them back in sorted order
cbSize.Items.AddRange(items.ToArray());

//gotta clear ArrayList for the next time or else things will add up
items.Clear();
4

2 回答 2

2

这是因为 ComboBox 只能容纳一种类型的数据吗?

不,在下面尝试它会起作用

cbSize.Items.Add("44");
cbSize.Items.Add(44);

问题在于您的项目集合,它是类型安全的。你不能给它添加不同的类型。

尝试使用对象列表。它会起作用的。原因是 int 和 string 都是对象

List<object> items = new List<object>();
items.Add(1);
items.Add(30);     
items.Add("4");    
items.Add("2");    

//since you have string and int value you need to create custom comparer
items.Sort((x, y) => Convert.ToInt32(x).CompareTo(Convert.ToInt32(y)));

//now clear original cbSize items
cbSize.Items.Clear();

//and add them back in sorted order
cbSize.Items.AddRange(items.ToArray());

或者您可以使用 ArrayList 类(不是类型安全的,因为它可以存储任何对象)

var integers = new ArrayList();
integers.Add(1);
integers.Add(2);
integers.Add("3");
comboBox1.Items.AddRange(integers.ToArray());
于 2012-06-13T17:37:09.407 回答
0

是的。你可以做的是提供一个可以适应整数和字符串的 Size 类:

items.Add(new Size(3));
items.Add(new Size(4));
items.Add(new Size("large"));

然后,您可以使 Size 类实现 IComparable,以便您可以调用该Sort()方法。

于 2012-06-13T17:46:12.070 回答