C# のリストから指定したプロパティの値を持つオブジェクトを取得する方法

C# のクラスオブジェクトのリスト (List) があって、ID などの値を指定して、その ID を持つオブジェクトを取得したいような時ありますよね。

例えば、次のような Student クラスのリスト List<Student> があって、そのうち、StudentID = 2 の Student オブジェクトを取得したいような時です。

class Student
{
    public int StudentID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Student(int studentID, string firstName, string lastName)
    {
        StudentID = studentID;
        FirstName = firstName;
        LastName = lastName;
    }
}

リスト内に条件に合致するオブジェクトが複数存在して、結果をリストとして取得したいような時はこちらをごらんください。

今回は、リスト内に条件に合致するオブジェクトかひとつだけ存在すると想定されるようなケースで、それを Student オブジェクトとして取得する方法をご紹介します。


C# のリストから指定したプロパティの値を持つオブジェクトを取得する方法

C# でリストを ID などの値を指定してフィルターして、その ID を持つオブジェクトを取得したい時には、LinqFirstOrDefault メソッドや、ListFind メソッドが使えます。

使い方は リスト.FirstOrDefault(obj => [obj を使った条件式])リスト.Find(obj => [obj を使った条件式]) のように使います。

どちらも obj としている箇所は他の名前でも大丈夫で、データ型はリストに入っているオブジェクトのデータ型になります。


戻り値はどちらのメソッドとも、オブジェクトが見つかった時はそのオブジェクトが、見つからなかったときは、そのオブジェクトのデフォルト値がかえります。

クラスのデフォルト値は null なので、クラスオブジェクトのリストの時は見つからなかった時に null がかえります。

また、複数のオブジェクトが条件に合致した時は、両方のメソッドと共に、最初にみつけたオブジェクトを返します。


C# のクラスオブジェクトのリストに対して、指定した ID を持つオブジェクトを取得するサンプルーコードは次の通りです。

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var students = new List<Student>();
            students.Add(new Student(1, "Kana", "Yamada"));
            students.Add(new Student(2, "Keita", "Maeda"));
            students.Add(new Student(3, "Kaede", "Tanaka"));
            students.Add(new Student(4, "Ryota", "Suzuki"));
            students.Add(new Student(5, "Saki", "Taguchi"));

            var s1 = students.FirstOrDefault(s => s.StudentID == 2);
            if (s1 != null)
            {
                Console.WriteLine(s1.FirstName);
            }

            Console.WriteLine("-------------------");

            var s2 = students.Find(s => s.StudentID == 2);
            if (s2 != null)
            {
                Console.WriteLine(s2.FirstName);
            }
        }
    }

    class Student
    {
        public int StudentID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public Student(int studentID, string firstName, string lastName)
        {
            StudentID = studentID;
            FirstName = firstName;
            LastName = lastName;
        }
    }
}

11 ~ 16 行目は Student クラスのオブジェクトを持つ List を生成しているだけです。

18 行目では、Linq の FirstOrDefault メソッドを使って、students リストの中から、StudentID が 2 の Student オブジェクトを取得しています。

26 行目では、List の Find メソッドを使って、students リストの中から、StudentID が 2 の Student オブジェクトを取得しています。


上のコードを実行すると次のようになります。

Keita
-------------------
Keita

C# のリストから指定したプロパティの値を持つオブジェクトを取得する方法 1


取得した Student オブジェクトは、リスト内にあったのと同じ Student オブジェクトをポイントしているので、取得したオブジェクトのクラス変数を変更すると、リスト内の Student オブジェクトも変更されます。


以上、C# のリストから指定したプロパティの値を持つオブジェクトを取得する方法をご説明しました。

© 2024 C# 入門