Home > C# > C# 学び直し > List<T>クラス

C#でList<T>クラスを使用する

新規作成日 2017-10-20
最終更新日

List<T>クラスは、.NET Frameworkに用意されているコレクションと呼ばれるデータを格納するコンテナの1つです。動的に大きさを変更できる配列です。コンテナとは、特定のデータを格納するクラスです。

List<T>クラスは、多用するデータコンテナですが、使い方の情報は、あまりまとまっていない気がするので、理解を確認する目的で、自分なりにまとめてみたいと思います。

コレクション

コレクションは、オブジェクトの集合を表します。.NET Frameworkで、実装が面倒なデータコンテナが、すぐに利用できるコレクションとして予め用意されています。

コレクションの利点の1つは、オブジェクトの集合に対する操作を標準化できることです。明確に定義された複数のインターフェイスから構築されているため、組み込まれたインターフェイスに基づいた実装が予め備わっています。そのことにより、一貫した操作体系で利用できます。

List<T>に継承されているインターフェイス

List<T>は、動的に大きさを変更できる配列です。そのため、C#では、いろいろな場面で利用されます。データを追加する可能性がある配列は、Listを使用します。

List<T>は、多くのプロパティやメソッドを持っています。それらの多くは、継承するインターフェイスに由来しています。その為、インタフェイスごとに、プロパティやメソッドを理解していった方が、Listを含むコレクション全体を理解しやすくなります。

独自クラスのListを作成する際には、これらのインターフェイスを継承し、実装しておかないとList<T>クラスの関連するメソッドが利用できなくなります。

ICollection<T>インターフェイス

msdnの情報:ICollection<T>インターフェイス

動的に大きさを変更する配列に関するプロパティやメソッドを提供します。具体的には、配列の要素を追加したり、削除したり、書き換えたり、並べ替えたりする機能です。

IEnumerable<T>インターフェイス

msdnの情報:IEnumerable<T>インターフェイス

要素を列挙するためのプロパティやメソッドを提供します。for eachループやLINQを使って要素を取り出すためには、IEnumerable<T>インターフェイスを実装している必要があります。

List<T>クラスを使用する

msdnのList<T>クラスの説明

単純に使用することは、難しくありません。そして、機能が豊富です。そのため、さまざまな場面で、List<T>を活用するそれぞれのコード例を収集し、機能や使い方を理解することが適切です。

確認した時点では、msdnのList<T>クラスの説明は、翻訳が読みにくいので、自分で翻訳し直しました。

翻訳した、msdnのList<T>クラスの説明

C#のオブジェクトは、オブジェクトを格納できます。そのため、List<T>のTの部分に新たにList<T>を入れることも実現可能です。うまく利用すれば、かなり複雑なデータコンテナとしても利用可能です。

こまめに使用例のコードを集めていきましょう。

配列の内容をList<T>に格納する

List<T>の要素をAddメソッドを1つ1つ追加するのではなく、一度に配列をList<T>に変換したいときがあります。その場合は、Addメソッドではなく、AddRangeメソッドを使用します。

C# List<T>の2次元配列List<List<T>>

C#のオブジェクトは、オブジェクトを格納できます。そのため、List<T>のTの部分に新たにList<T>を入れることも実現可能です。うまく利用すれば、かなり複雑なデータコンテナとしても利用可能です。

データを格納するクラスに、IEquatable<T>インターフェイスを実装する

リスト内の項目を検索する際、あるいは、項目同士を比較して、同じかどうか確認する操作は、頻繁に必要になります。

複数のデータメンバを持つクラスをリストコンテナで、このような操作を行うためには、データを格納するクラスに、IEquatable<T>インターフェイスを実装し、Equalsメソッドをオーバーライドする必要があります。

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」