LoginSignup
0
1

More than 5 years have passed since last update.

ComboBoxに連番をLINQで挿入する (Windows Forms)

Last updated at Posted at 2019-04-12

ComboBoxに連番(例えば、月選択用に1~12)をセットしたい。

最初にやってみたこと

cb.Items.AddRange(Enumerable.Range(1,12).ToArray());

と書いたら受け付けてくれなかった。要はItemCollection.AddRange()object[]を受け付けるが、int[]object[]じゃなくobjectなんですな。

次にやってみたこと

じゃあ、Enumerable<int>のそれぞれの要素をobjectにキャストしちゃえばいいんじゃない?って書いてみたのがこれ。

cb.Items.AddRange(Enumerable.Range(1,12).Cast<object>().ToArray());

ちょっと不格好。

考えを変えてみた

Combobox.Itemsobjectを追加していくというアプローチからCombobox.DataSourceに入れるというアプローチに変えてみた。

cb.DataSource = Enumerable.Range(1,12).ToList();

結果的には、これで良かった。ちなみに、これはList<object>でもArray<object>でもいい。(IListインターフェースを要求するのでEnumerable<object>ではだめ。)
ここではショートコードプログラミングの流儀に従って短い方を選んでいる。

まあ、月ならリソースで持ってもいいのだけど、年は5年前から10年後なんて形だとこういう形で生成せざるを得ない。そういうのでも
cs
Enumerable.Range(DateTime.Today.Year-5, 15)

で簡単に解決できる。forはできるだけ使わない。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1