アフィリエイト広告を利用しています

広告

posted by fanblog

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#構文を思い出す辞書がわりに。

標準講座C# (Programmer’sSELECTION)

新品価格
¥5,040から
(2012/3/17 08:19時点)




C# LINQラムダ式入門 1. 便利なとこから始めよう
C# LINQラムダ式入門 2. 次のLINQ構文
C# LINQラムダ式入門 3. 後はとりあえず俯瞰してみる
C# LINQラムダ式入門 4. LINQの引数の型を理解する
C# LINQラムダ式入門 5. ラムダ式をもう少し詳しく見てみる

この記事へのコメント

   
×

この広告は30日以上新しい記事の更新がないブログに表示されております。