これに気付いたときものすごく感動したのでメモ.
最小値/最大値探索のコードはいつも for 文を書いてしまうんだけど,
せっかく C# 使ってるんだからもっとスマートな書き方がないもんかと
毎日悶々と過ごしていました.
で,適当に書いてみた結果がこれだよ!
1 2 3 4 5 6 7 |
public int MaxID { get { return RecordData.Select(item => item.ID).Max(); } } |
だいぶ周辺コードを省略していますが,
int 型の ID という公開プロパティを持ったクラスのコレクションデータである
RecordData で,ID の最大値を返す MaxID プロパティの get アクセサです.
いつもの自分ならこうしていた.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public int MaxID { get { int maxID = int.MinValue; for (int i = 0; i < RecordData.Count; i++) { if (maxID < RecordData[i].ID) maxID = RecordData[i].ID; } return maxID; } } |
なにが気に食わないって,初期値付きの自動変数を自分で与えないといけないとこ.
コーディング中に 「えっと,初期値は…」 って一瞬手が止まっちゃう.
最悪な場合は初期値を間違えて正常に動作しなかったり.
これと同じ内容を Linq ならたった 1 行で書けるなんて!
やっぱり Linq はしっかり勉強しておくべきだなぁ.