Listクラスでは、述語(Predicate<T>デリゲート)を用いた検索・一致の検証が行えます。 条件式を記述したメソッドを一種の引数として渡すことで、その条件に合致する要素が存在するかどうか、といった操作が出来るようになります。

例えば、Containsメソッドでは引数に具体的な値を指定してその要素が含まれているかどうかは調べられますが、どのような要素が含まれているかという条件を指定することは出来ません。 対してExistsメソッドを使うと、「文字列の長さが5以上の」や「数値の大きさが16未満の」といった条件を指定した上で、それに合致する要素が含まれているかどうかを調べることができます。

Existsメソッドを使って条件に合致する要素がListに含まれるかどうか調べる(匿名メソッド版、C# 2.0以降)
using System;
using System.Collections.Generic;

class Sample {
  static void Main()
  {
    List<string> list = new List<string>() {"Alice", "Bob", "Charlie", "Dave", "Eve"};

    // 長さが5以上の要素が存在するかどうか
    Console.WriteLine("Exists: {0}", list.Exists(delegate(string s) { return 5 <= s.Length; }));
  }
}
実行結果
Exists: True

述語を用いた検索・一致の検証の場合、多くの場合既存のメソッドではなく匿名メソッドやラムダ式を使って述語となるデリゲートを記述することになります。 匿名メソッド・ラムダ式によるデリゲートの記述方法について詳しくはデリゲートの基本 §.匿名メソッドを使ったデリゲートの作成およびデリゲートの基本 §.ラムダ式を使ったデリゲートの作成を参照してください。

このように、Predicateデリゲートをメソッドの引数として渡すことで、そのデリゲートによって記述された述語の条件にあう要素の検索などが行えます。

Existsメソッド以外にも、Listクラスには述語を使うことができるメソッドとして次のようなメソッドが用意されています。 なお、LINQのメソッドを使うことでも同様の操作ができるため、参考のため相当する操作を行えるLINQメソッドについても併記しています。

述語を使った検索・一致の検証を行うためのListクラスのメソッド
メソッド 動作 相当するLINQのメソッドの呼び出し
合致する要素の取得 Find 述語で記述した条件に合致する最初の要素を取得する
(合致する要素がない場合は型のデフォルト値*1が返される)
FirstOrDefault(Func<TSource, bool>)
FindLast 述語で記述した条件に合致する最後の要素を取得する
(合致する要素がない場合は型のデフォルト値*1が返される)
LastOrDefault(Func<TSource, bool>)
FindAll 述語で記述した条件に合致するすべての要素をListで取得する
(合致する要素がない場合は空のListが返される)
Where(Func<TSource, bool>) + ToList()
合致する要素のインデックスの取得 FindIndex 述語で記述した条件に合致する最初の要素のインデックスを取得する
(合致する要素がない場合は-1が返される)
Select(Func<TSource, int, TResult>) + First(Func<TSource, bool>)
FindLastIndex 述語で記述した条件に合致する最後の要素のインデックスを取得する
(合致する要素がない場合は-1が返される)
Select(Func<TSource, int, TResult>) + Last(Func<TSource, bool>)
合致する要素の有無の検証 Exists 述語で記述した条件に合致する要素が存在するかどうかを調べる Any(Func<TSource, bool>)
TrueForAll 述語で記述した条件に、すべての要素が合致するかどうかを調べる All(Func<TSource, bool>)
合致する要素の削除 RemoveAll 述語で記述した条件に合致する要素を削除する Where(Func<TSource, bool>) + ToList()
(FindAllの述語を否定(NOT)した述語を指定)
*1型のデフォルト値
参照型のListではnull/Nothing、値型のListでは00に相当する値が返されます。 型とデフォルト値については型の種類・サイズ・精度・値域 §.型のデフォルト値を参照してください。

以下は、これらのメソッドを使った例です。