C# .NET 8 List Merge Without Duplicates

【C# .NET 8 対応】List<string> を重複なしでマージする方法|AddRangeとExceptの使い方

2025年7月16日

✅ はじめに

C#でList<string>を扱う際、「2つのリストを重複なくマージしたい」という場面はよくあります。
特に .NET 8 でモダンなコードを書くなら、AddRangeExcept を活用する方法がおすすめです。

List<string> 同士を 重複なしで結合(マージ)する方法について、初心者にも分かりやすく解説


🔧 よくある間違い:AddRangeだけでは重複を排除できない

例えば、以下のようなコードを考えてみましょう。

List<string> a1 = new List<string> { "a", "b", "c" };
List<string> a2 = new List<string> { "b", "c" };
a1.AddRange(a2);

このコードでは、a1a2 のすべての要素が追加されます。その結果、"b""c"重複してしまいます。


✅ 重複なしでList<string>をマージする正しい方法

C# では Except を使うことで、あるリストに含まれていない要素だけを抽出できます。
それを使って、次のように記述します。

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

class Program
{
    static void Main()
    {
        List<string> a1 = new List<string> { "a", "b", "c" };
        List<string> a2 = new List<string> { "b", "c" };

        // 重複を除いてマージ
        a1.AddRange(a2.Except(a1));

        foreach (var item in a1)
        {
            Console.WriteLine(item);
        }
    }
}
    

✅ 実行結果:

a
b
c
    

このように、Except(a1) によって a2 の中から a1 にない要素だけが選ばれ、AddRange で追加されます。


🔍 応用:大文字小文字を無視してマージする方法

文字列の大文字と小文字を区別せずにマージしたい場合は、StringComparer.OrdinalIgnoreCase を使う方法があります。

var merged = a1
    .Concat(a2)
    .Distinct(StringComparer.OrdinalIgnoreCase)
    .ToList();
    

この方法なら、"A""a" を同一とみなして重複を防げます。


🎯 まとめ

操作説明
AddRangeリストに要素を追加(重複を許す)
Except他のリストに存在する要素を除外
Distinct重複の排除
StringComparer.OrdinalIgnoreCase大文字小文字の違いを無視した比較

C#でList<string>を扱うときは、単純なAddRangeでは重複に注意が必要です。
ExceptDistinctを組み合わせて、スッキリしたコードを目指しましょう!

WinUI 3 / XAML の Grid.Width 設定方法

WinUI 3でMenuFlyoutをShowAtで表示する方法【コード付き解説】

MenuFlyoutWinUI 3 で便利なポップアップメニュー

WinUI 3の開発で混乱しがちな「空白のウィンドウ」と「空白のページ」の違い

PowerShellでMSIXアプリ(Storeアプリ)を起動する方法|AppUserModelIdとURIスキーム活用術

Microsoft Storeアプリ更新時のロールアウト設定まとめ

PowerShellでtail -f!WindowsでUTF-8対応のリアルタイムログ監視を実現する方法

Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法

Microsoft Authenticatorのオートフィル機能が2025年7月に終了

RuntimeBroker.exeとMsEdgeWebView2.exeとは?Windows 11のプロセスについて

PowerShellでGrapheme Clusterについて処理を考える

業務用ノートパソコンのストレージは暗号化されている?BitLockerの確認と対策方法

【Windows】Volta コマンドライン インストール | Node.jsをバージョン管理する方法

【C# .NET 8 対応】List<string> を重複なしでマージする方法|

【C#】大容量ファイルを指定サイズ以下に分割する方法|.NET8対応コード付き

【C# .NET 8】ファイルから重複行を削除する2つの方法|Distinct vs HashSet

【C#】.emlファイルの本文を読みやすく抽出する方法

WinUI 3 ComboBoxの自作クラスバインドと選択イベント検出方法

switch文でオブジェクトの型を判別する方法

【WPF】Task.Run中にUIを更新する方法

System.Text.Json 9.0.0.0 で FileNotFoundException

C#で改行・カンマ入りのCSVを正しく読み込む方法【.NET8対応】

C#/.NET 8でDateTimeを日本時間でISO 8601形式に変換する方法

【Anker Soundcore Liberty 4】イヤーピース紛失!代替品はAmazonで購入

和暦設定でも安心!C#でISO 8601やカスタム日時文字列を確実にDateTimeに変換