プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

C#でListをコピーする

この記事は2022年08月02日に投稿しました。

目次

  1. はじめに
  2. C#でListをコピーする
  3. おわりに

1. はじめに

こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているC#でListをコピーする方法についてです。

目次へ

2.C#でListをコピーする

C#でListをコピーするには、以下のような実装にします。
シャローコピーだと元のListの参照がコピーされるため、元のListの変更がコピー先のListにも反映されます。
それに対しディープコピーだと元のListのコピーとなるため、元のListの変更はコピー先のListに反映されません。

実装例

using System;
using System.Collections.Generic;

namespace SampleCopyList
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            // 元のリスト
            var srcList = new List<string>() { "Apple", "Banana", "Orange" };

            // 元のリストをシャローコピーします。
            var shallowCopyList = srcList;

            // 元のリストをディープコピーします。
            var deepCopyList = new List<string>(srcList);

            // リストの内容を表示します。
            Console.WriteLine(string.Join(",", srcList));
            Console.WriteLine(string.Join(",", shallowCopyList));
            Console.WriteLine(string.Join(",", deepCopyList));

            // 元のリストを変更します。
            srcList[1] = "Grape";

            // 変更後のリストの内容を表示します。
            Console.WriteLine(string.Join(",", srcList));
            Console.WriteLine(string.Join(",", shallowCopyList));
            Console.WriteLine(string.Join(",", deepCopyList));

            Console.ReadKey();
        }
    }
}

実行結果

Apple,Banana,Orange
Apple,Banana,Orange
Apple,Banana,Orange
Apple,Grape,Orange
Apple,Grape,Orange
Apple,Banana,Orange

API Reference

Listクラス

目次へ

3. おわりに

Listをコピーする際、当初シャローコピーでコピーしていたため、想定の動作になりませんでした。
そのため調べてみるとディープコピーすればよいことがわかりました。

紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。

目次へ


私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。

また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。

EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688

目次へ