tekitoumemo’s diary

思ったことを書くだけ。長文版Twitter

【C#】Listになってるクラスのプロパティを一行で変える


小ネタ、めっちゃ小ネタ。みんな大好きLINQを使います。

Listのクラスのプロパティを一括で変えたいってときがあると思います(割と)そこでプログラム書きたくない主義の僕はふと思いつき調べたんで書きます。

まずは普通に一括でhoge1を1にします。

public partial class Hoge
{
    public int hoge1 { get; set; }
    public int hoge2 { get; set; }
    public int hoge3 { get; set; }
 } 

var models = new Hoge();
// モデル生成部分は割愛
foreach(var m in models)
{
     m.hoge1 = 1;
}

なんかつーか微妙だよね。このレベルだったら一行で描きたいよね。ここではLINQを使います。

public partial class Hoge
{
    public int hoge1 { get; set; }
    public int hoge2 { get; set; }
    public int hoge3 { get; set; }
 } 

var models = new Hoge();
// モデル生成部分は割愛
models.Select(m => m.hoge1 = 1).ToList();

はい、一行で終わりです。ここでのポイントはToListにしないとモデルの値が変化しないこと。LINQの評価はIEnumerableに要求があったときにされるので何かしら要求しないとただ単に内包したオブジェクトが出来上がるってだけ!

さらにif文とかでなになにだったら値を入れるみたいなことをしたいときあると思います。それが下の例

// 動確してません!スマホで記事書いてるし!!
models.Where(m => m.hoge2 == 1).Select(m => m.hoge1 = 1).ToList();

hoge2が1の場合だけhoge1を1にする(1って言い過ぎだろ。。)一行で終わり。

このようにメソッドチェーンで繋いで結果を得ることが出来ます。今回のケースでなくてもLINQではいろんなことが出来るのでどんどん使っていきましょう!

※乱用はダメ。ただのforループって認識でいると乱用してる恐怖がわかるはず