動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About
技術記事

C#でLinqの結果でNull回避したい場合の処理!

バイブス父さん
現役の業務SE
2020年4月5日2 min read
C#でLinqの結果でNull回避したい場合の処理!

C#でLINQを使ってコードを書いていて下記のようなパターンにぶち当たったのでその備忘録。

まず。配列を用意。

static void Main(string[] args) (csharp)#f382a67110db
        static void Main(string[] args)
        {
            var items = new int[]{1,2,3,5,8,9,7,10,66,78,99,100};
        }
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です

この中から、3で割り切れる数字を取得してみる。

var items = new int[]{1,2,3,5,8,9,7,10,66,78,99,100}; (csharp)#9f085fe201b0
            var items = new int[]{1,2,3,5,8,9,7,10,66,78,99,100};
 
            var extractionItems = items.Where(item => item % 3 == 0);
 
            foreach (var item in extractionItems)
            {
                Console.WriteLine(item);
            }
 
            Console.ReadLine();
▸ 実行ボタンで結果を表示

結果はこんな感じになる。

では結果がない場合の処理をやってみる。

例えば、10000で割り切れる場合の数字を取得してみるが、MAXの数字は100なので、値は絶対にない。

static void Main(string[] args) (csharp)#9e298d8db799
        static void Main(string[] args)
        {
            var items = new int[]{1,2,3,5,8,9,7,10,66,78,99,100};
 
            var extractionItems = items.Where(item => item % 10000 == 0);
 
            foreach (var item in extractionItems)
            {
                Console.WriteLine(item);
            }
 
            Console.ReadLine();
        }
▸ 実行ボタンで結果を表示

結果はこう

なぜかNullPointerExeptionがスローされていない。

デバッグで中身を見てみるとNullではない。

とりあえず、列挙体がないという結果が返っているらしい。

static void Main(string[] args) (csharp)#0e707259adbd
        static void Main(string[] args)
        {
            var items = new int[]{1,2,3,5,8,9,7,10,66,78,99,100};
 
            var extractionItems = items.Where(item => item % 10000 == 0);
 
            if (extractionItems == null)
            {
                Console.WriteLine("結果はNullです。");
            }
            else
            {
                Console.WriteLine("結果をNullではありません。");
            }
 
            Console.ReadLine();
        }
▸ 実行ボタンで結果を表示

なのでこれにNull回避をしても下記のようになる。

C#でLinqを使って結果Nullを回避する。

ではどのようにして、Linqの結果がない場合を捕捉するのか?

下記のようにすればいい。

C#でLinqを使って結果Nullを回避する。 (csharp)#2920c9484983
    class Program
    {
        static void Main(string[] args)
        {
            var items = new int[]{1,2,3,5,8,9,7,10,66,78,99,100};
 
            var extractionItems = items.Where(item => item % 10000 == 0);
 
            if (extractionItems.Any())
            {
                Console.WriteLine("結果がありました。");
            }
            else
            {
                Console.WriteLine("結果はありません。");
            }
 
            Console.ReadLine();
        }
    }
▸ 実行ボタンで結果を表示
この記事のコードと手順は ぜんぶ動作検証済み。 安心して現場で試してくれ。
バイブス父さん

現役の業務SE。C# / SQL Server 保守の現場から、コードも人もキャリアも全部書く。 実体験ベース。

運営者について