C# 初心者のための List の使い方ガイド

2025年7月31日

配列より便利な「可変長リスト」をマスターしよう


はじめに

C#でデータをまとめて扱うとき、まず思い浮かぶのは「配列(Array)」でしょう。しかし、あとから要素を追加したり削除したりしたい場合には、List<T> が圧倒的に便利です。

この記事では、C#の List<T> の基本から、使いどころ、注意点までを初心者向けにわかりやすく解説します。


List とは?

List<T> は、ジェネリックコレクションの1つで、「Tのリスト」と読みます。Tの部分には型名(int、string、自作クラスなど)を入れます。

配列との違い

特徴配列(T[]List(List<T>
要素数固定可変
要素追加不可(再作成要)Addメソッドで可能
要素削除不可Removeメソッドで可能
検索・並び替え手動で実装便利なメソッドが豊富

基本的な使い方

List の宣言と初期化

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<string> fruits = new List<string>();
        fruits.Add("りんご");
        fruits.Add("バナナ");
        fruits.Add("みかん");

        foreach (var fruit in fruits)
        {
            Console.WriteLine(fruit);
        }
    }
}
  • System と Collections.Generic を使います。これにより、画面表示やリスト(List)などが使えるようになります。
  • Program というクラスを定義します。ここがプログラムの本体です。
  • Main メソッドは、プログラムの実行開始地点です。
  • List<string> fruits で、文字列のリスト(果物の入れ物)を作ります。
  • そのリストに “りんご", “バナナ", “みかん" を追加します。
  • foreach 文で、リストの中の果物をひとつずつ取り出し、Console.WriteLine で画面に表示します。

日本語の「フルーツ」と英語の “fruit/fruits” は、感覚や使い方に微妙な違いがあります。その違いが、プログラミングの命名にも影響します。


🍎 日本語の「フルーツ」と英語の “fruit/fruits” の違い

項目日本語の「フルーツ」英語の “fruit” / “fruits”
意味果物全般(主にカタカナ語)“fruit”:集合名詞 / “fruits”:可算名詞(複数形)
単数・複数の区別あいまい(「フルーツ1つ」など普通に言う)明確(“a fruit” vs “fruits”)
文脈一般に「果物全体」を指す傾向が強い文脈によって単数・複数を厳密に区別
プログラミングの変数名fruits / fruit のような形は馴染みが薄い人もfruits = リスト、fruit = 要素が自然

🍌 英語での “fruit” と “fruits”

英語では…

  • fruit(不可算名詞・集合名詞):
    • “Fruit is good for you.”(果物は健康に良い)← 種類・量関係なし
  • fruits(可算名詞の複数形):
    • “Apples and bananas are my favorite fruits.”(りんごとバナナは私のお気に入りの果物です)

→ プログラミングではこの 可算名詞の複数形 “fruits” を使ってリストや配列を表すのが自然。


🍇 プログラミングの命名での違和感

日本語話者には:

  • fruits と fruit の違いが「単数・複数」の感覚でピンとこないことがある
  • 「fruitList とか fruitArray の方が分かりやすくない?」と感じる人もいる

→ これは 母語の言語構造の違いによる自然な感覚のズレです。


✅ まとめ:プログラミングでのコツ

パターン意味推奨される命名
fruit1つの果物単数形変数名:fruit, apple
fruits複数の果物コレクション名:fruits, fruitList, fruitArray

つまり

日本語の「フルーツ」は集合的でぼんやりしていても問題ありませんが、

プログラミングでは英語の文法感覚(単数 vs 複数)を意識する方が読みやすくなります。

これを押さえると、国際的なプロジェクトでも迷いなく命名できるようになります。

実行結果

りんご  
バナナ  
みかん

よく使うメソッドとプロパティ

メソッド/プロパティ説明
Add(item)要素を末尾に追加list.Add(“apple")
Remove(item)一致する要素を削除(最初の1つ)list.Remove(“banana")
Count要素数を取得int count = list.Count;
Clear()全要素を削除list.Clear();
Contains(item)指定した要素があるかどうか確認list.Contains(“apple")
IndexOf(item)要素のインデックスを取得(なければ-1)int i = list.IndexOf(“apple")
Insert(index, item)指定位置に要素を挿入list.Insert(1, “grape")
Sort()要素を並び替え(昇順)list.Sort();

List を使うときの注意点

値型と参照型の違い

  • List<int> のような 値型 では、要素を直接保持しています。
  • List<MyClass> のような 参照型 では、要素はオブジェクトへの参照です。
class Person
{
    public string Name { get; set; }
}

List<Person> people = new List<Person>();
var p = new Person { Name = "太郎" };
people.Add(p);
p.Name = "次郎";

Console.WriteLine(people[0].Name); // "次郎"

foreach での削除はNG

foreach (var item in list)
{
    list.Remove(item); // エラーになる可能性あり
}

代わりに逆順 for ループを使うのが安全です。


応用:オブジェクトのリスト

class Enemy
{
    public string Name { get; set; }
    public int HP { get; set; }
}

List<Enemy> enemies = new List<Enemy>
{
    new Enemy { Name = "スライム", HP = 30 },
    new Enemy { Name = "ドラゴン", HP = 300 }
};

foreach (var enemy in enemies)
{
    Console.WriteLine($"{enemy.Name} のHPは {enemy.HP} です");
}

まとめ

List<T> は、可変長で柔軟なデータ構造であり、C#のあらゆる場面で登場します。初学者のうちから使い慣れておくと、配列よりも効率よくコードが書けるようになります。


補足:Listを使ったミニ課題

Q. 「名前リスト」に”さとう”, “たなか”, “すずき”を追加し、五十音順に並び替えて表示せよ

List<string> names = new List<string> { "さとう", "たなか", "すずき" };
names.Sort();

foreach (var name in names)
{
    Console.WriteLine(name);
}
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // 名前リストの作成と初期化
        List<string> names = new List<string> { "さとう", "たなか", "すずき" };

        // 五十音順に並び替え(Sortは文字列の辞書順で並び替える)
        names.Sort();

        // 並び替えた名前を表示
        foreach (var name in names)
        {
            Console.WriteLine(name);
        }
    }
}

次に学ぶと良いもの

  • Dictionary<TKey, TValue>:名前と値のペアを管理できる
  • LINQ:リストを検索・変換する高機能なツール群
  • ReadOnlyCollection<T>:読み取り専用にしてリストの安全性を高める

訪問数 48 回, 今日の訪問数 1回

C#,List

Posted by hidepon