3

私は何かを理解しようとしています。ComboBox名前付きの「cbSize」にいくつかのアイテムを追加するメソッドがあります。2 種類のデータを追加すると、コードがクラッシュすることがわかりました。これは、ComboBoxが 1 種類のデータしか収容できないためですか?

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 が 1 種類のデータしか収容できないためですか?

いいえ、以下を試してみてください

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

はい。あなたができることは、intとstringsから適応する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 に答える