2012年03月20日
C# LINQラムダ式入門 2. 次のLINQ構文
前回はWhere句を紹介しました。
なんかよくわからんけど、使えたーってところまで来ましたか?
今回は、もっとLINQ構文と仲良くなる為に、Where句以外で
よく使うもの(自分調べ)を紹介しましょう。
・FirstOrDefault
リンクを使わない時。
int[] ages = new int[] { 11, 10, 21, 22, 30 };
int firstAge;
int firstOfOver20;
int firstOfOver40;
foreach (int age in ages)
{
firstAge = age;
break;
}
foreach (int age in ages)
{
if (20 <= age)
{
firstOfOver20 = age;
break;
}
}
foreach (int age in ages)
{
if (40 <= age)
{
firstOfOver40 = age;
break;
}
}
LINQを使うと、こうなります。
かなり見やすいコードになったと思いませんか?
int[] ages = new int[] { 11, 10, 21, 22, 30 };
int firstAge = ages.FirstOrDefault();
int firstOfOver20 = ages.FirstOrDefault(x => 20 <= x);
int firstOfOver40 = ages.FirstOrDefault(x => 40 <= x);
働きの説明はコードからわかると思うので省略。
値型だから、デフォルト値(firstOfOver40のケース)はゼロになりますが、
参照型であれば、デフォルト値はnullになります。
ここで、一つだけ注意。
よく似たLINQ構文に、Firstというものがあります。
が、Firstは極力使わないことをお勧めします。
なぜなら、Firstは条件を満たすものが必ず存在する
という前提でしか使えないからです。
つまり、こういうことです。
int firstOfOver40 = ages.First(x => 40 <= x); // 例外発生!
条件にあうものがなければ、try〜catch構文で囲んでいない限り
アプリケーションはサヨナラしてしまいます。
もしコレクション内に該当するものがない場合に
例外を発生する動作を望んでいるとしても、
FirstOrDefaultで書いて明示的にそれにあった例外を
返す方が見やすいコードだと思います。
int firstOfOver40 = ages.FirstOrDefault(x => 40 <= x);
if (firstOfOver40 == 0)
{
//// 例外発生処理
}
FirstOrDefaultはかなり使いどころがあると思いませんか?
前回のWhereとFirstOrDefaultで (x =>・・・)をたくさん使って
表現を体にしみこませて下さい。
C#勉強の最初の一冊。ド忘れしたC#構文を思い出す辞書がわりに。
![](https://www13.a8.net/0.gif?a8mat=1ZMRJR+FUDAB6+249K+BWGDT)
C# LINQラムダ式入門 1. 便利なとこから始めよう
C# LINQラムダ式入門 2. 次のLINQ構文
C# LINQラムダ式入門 3. 後はとりあえず俯瞰してみる
C# LINQラムダ式入門 4. LINQの引数の型を理解する
C# LINQラムダ式入門 5. ラムダ式をもう少し詳しく見てみる
なんかよくわからんけど、使えたーってところまで来ましたか?
今回は、もっとLINQ構文と仲良くなる為に、Where句以外で
よく使うもの(自分調べ)を紹介しましょう。
・FirstOrDefault
リンクを使わない時。
int[] ages = new int[] { 11, 10, 21, 22, 30 };
int firstAge;
int firstOfOver20;
int firstOfOver40;
foreach (int age in ages)
{
firstAge = age;
break;
}
foreach (int age in ages)
{
if (20 <= age)
{
firstOfOver20 = age;
break;
}
}
foreach (int age in ages)
{
if (40 <= age)
{
firstOfOver40 = age;
break;
}
}
LINQを使うと、こうなります。
かなり見やすいコードになったと思いませんか?
int[] ages = new int[] { 11, 10, 21, 22, 30 };
int firstAge = ages.FirstOrDefault();
int firstOfOver20 = ages.FirstOrDefault(x => 20 <= x);
int firstOfOver40 = ages.FirstOrDefault(x => 40 <= x);
働きの説明はコードからわかると思うので省略。
値型だから、デフォルト値(firstOfOver40のケース)はゼロになりますが、
参照型であれば、デフォルト値はnullになります。
ここで、一つだけ注意。
よく似たLINQ構文に、Firstというものがあります。
が、Firstは極力使わないことをお勧めします。
なぜなら、Firstは条件を満たすものが必ず存在する
という前提でしか使えないからです。
つまり、こういうことです。
int firstOfOver40 = ages.First(x => 40 <= x); // 例外発生!
条件にあうものがなければ、try〜catch構文で囲んでいない限り
アプリケーションはサヨナラしてしまいます。
もしコレクション内に該当するものがない場合に
例外を発生する動作を望んでいるとしても、
FirstOrDefaultで書いて明示的にそれにあった例外を
返す方が見やすいコードだと思います。
int firstOfOver40 = ages.FirstOrDefault(x => 40 <= x);
if (firstOfOver40 == 0)
{
//// 例外発生処理
}
FirstOrDefaultはかなり使いどころがあると思いませんか?
前回のWhereとFirstOrDefaultで (x =>・・・)をたくさん使って
表現を体にしみこませて下さい。
C#勉強の最初の一冊。ド忘れしたC#構文を思い出す辞書がわりに。
![]() |
標準講座C# (Programmer’sSELECTION) 新品価格 |
![](https://www13.a8.net/0.gif?a8mat=1ZMRJR+FUDAB6+249K+BWGDT)
C# LINQラムダ式入門 1. 便利なとこから始めよう
C# LINQラムダ式入門 2. 次のLINQ構文
C# LINQラムダ式入門 3. 後はとりあえず俯瞰してみる
C# LINQラムダ式入門 4. LINQの引数の型を理解する
C# LINQラムダ式入門 5. ラムダ式をもう少し詳しく見てみる
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
投稿者:勝綾正テル|06:53|C# LINQ ラムダ式 入門
この記事へのコメント