「毎日Unity」の技術ブログ

開発で役立つ情報を発信する

【UnityC#】Listを代入する時に注意するべきこと

Listを代入する時に自分が予想していた挙動をしなくて戸惑ったことがあったので、なぜそうなったのか記事にすることにしました。

[ 2つの方法 ]

下記の2つのスクリプトは同じことをしているように見えると思いますが、実際は全く違うことをしています。

[ 参照渡し ]

下記のスクリプトのようにListStringTest2にListStringTest1を代入すると、その後ListStringTest2に要素を追加した時にListStringTest1にも要素が追加されてしまいます。
要するに参照渡しをしています。

using System;
using System.Collections.Generic;
using UnityEngine;

public class ScriptTest : MonoBehaviour
{
    void Start()
    {
        List<string> ListStringTest1 = new List<string> { "Unity", "VisualStudio", "Blender" };
        List<string> ListStringTest2 = new List<string> {  };

        ListStringTest2 = ListStringTest1;
    }
}

[ 値渡し ]

下記のスクリプトのようにListStringTest2にListStringTest1を代入すれば、その後ListStringTest2に要素を追加した時にListStringTest1にも要素が追加されることはありません。
要するに値渡しをしています。

using System;
using System.Collections.Generic;
using UnityEngine;

public class ScriptTest : MonoBehaviour
{
    void Start()
    {
        List<string> ListStringTest1 = new List<string> { "Unity", "VisualStudio", "Blender" };
        List<string> ListStringTest2 = new List<string> {  };

        ListStringTest2 = new List<string>(ListStringTest1);
    }
}