我想找出一些东西。我有一个方法可以将一些项添加到名为“cbSize”的ComboBox
中。我意识到如果我在其中添加两种类型的数据,代码将崩溃。这是因为ComboBox
只能容纳一种类型的数据吗?
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();
答案 0 :(得分: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());
答案 1 :(得分:0)
是。你可以做的是提供一个适应int和字符串的Size类:
items.Add(new Size(3));
items.Add(new Size(4));
items.Add(new Size("large"));
然后,您可以使Size类实现IComparable,以便您可以调用Sort()
方法。