読者です 読者をやめる 読者になる 読者になる

C# C#

Listを、ComboBoxに.Items.AddRangeを使って追加しようと思ったら、これが大変。

List<string> list = ...;
comboBox1.Items.AddRange(list.ToArray());

とすると、(AddRangeの引数の型である)object と(list.ToArray()の型である)string の間に継承関係がないためコンパイルできないのだ。これはhttp://www.hyuki.com/d/200508.html#i20050819104841の問題であり、完全に解決することは不可能である。仕方がないので、次のように書いてAddRangeできた。

List<string> list = ...;
comboBox1.Items.AddRange(list.ConvertAll<object>(delegate (string x) { return x as object;}).ToArray());

めでたしめでたし。匿名delegate最強。

じゃない。object []を要求するクラスがたくさんあることはMicrosoftにはわかりきってるはずなんだから、ArrayをArrayに変換する暗黙の型変換を定義しておけばいいのに。ついでに、List→Arrayの変換も暗黙にやってくれれば良いのにと思う。