for WPF developers
Home Profile Tips 全記事一覧

Any 拡張メソッドでシーケンスが空かどうかを確認する

(2017/03/07 20:06:27 created.)

(2017/03/07 20:18:30 modified.)

Any 拡張メソッドにはオーバーロードによって 2 つの機能があります。ここではそのうちの 1 つである空シーケンスの確認について紹介します。

Program.cs
  1. namespace Tips_Linq
  2. {
  3.     using System;
  4.     using System.Linq;
  5.  
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             var numbers = new int[] { 2, 3, 4, 5 };
  11.             Console.WriteLine("コレクションの要素は {{ {0} }} です。", string.Join(", ", numbers));
  12.  
  13.             var isBlank = !numbers.Any();
  14.             Console.WriteLine(isBlank ? "空です。" : "空ではありません。");
  15.  
  16.             Console.ReadKey();
  17.         }
  18.     }
  19. }


Any 拡張メソッドは指定されたシーケンスに要素があるかどうかを判定し、要素がある場合に true を返します。System.Linq では要素数を取得するための Count 拡張メソッドが用意されているため、こちらでも判定できますが、コレクションの要素数が多ければ多いほど処理速度は Any 拡張メソッドのほうが断然速いです。なぜなら、Any 拡張メソッドは先頭要素の有無によって即座に true/false を返すのに対し、Count 拡張メソッドは要素数分だけループしてカウント数をインクリメントする処理が走るからです。

配列なら Length プロパティ、List などのコレクションなら Count プロパティを見ても判定できるので、この場合はどちらを使っても大差ないでしょう。