C#でListの中身を検索する方法とその使い方(Find,FindAll,Contains)

当サイトではアフィリエイト広告を利用しています。

C#初級プログラミング

今回はカスタムクラスをリストにしている場合に
特定のデータを検索する方法をご紹介します。
キーワード:Find,FindAll,Contains

例えばデータを格納するクラスを作って,
それをリストに入れる状況を想定します。

データを格納するカスタムクラスはこんな感じ
 public sealed class ListData
 {
    public ListData(int id, string text)
    {
        Id = id;
        Text = text;
    }

    public int Id { get; set; }
    public string Text { get; set; }
 }

IdとTextのみのシンプルなクラスです。

これをリストにします。
 var list = new List<ListData>();
 list.Add(new ListData(1, "text1"));
 list.Add(new ListData(2, "text2"));
 list.Add(new ListData(3, "text3"));
 list.Add(new ListData(4, "text3"));
 list.Add(new ListData(5, "2 word"));

この状況での特定の値を検索する方法を紹介します。

方法1

対象が1件を想定している場合:Find
Idが重複していない前提であれば,
Idを指定して検索します。

var findVal = list.Find(x => x.Id == 2);

こんな感じで書くと,Idが2のデータのみ
findValに取得されます。

方法2

検索対象が複数の場合:FindAll

var findAllVal = list.FindAll(x => x.Text == "text3");

FindAllを使用すると,ヒットしたデータがすべて取得されます。
この場合はTextがtext3のデータのみが取得されるので
検索結果は2件になります。

方法3

上記方法だと,文字が完全に一致していないと
ヒットしないので,一部でも一致していたら
ヒットさせたい場合は「==」ではなく「Contains」を使います。

var findContains = list.FindAll(x => x.Text.Contains("2"));

こうすると,Textに2を含むデータがすべて取得できるため
Id2とId5のデータが取得されます。

このように,FindやFindAllを使うことで
カスタムクラスのリストでも簡単に
検索処理を行うことができます。

トップページへ戻る