はじめに
「Unity3D Immutable Collections」を Unity プロジェクトに導入することで
Unity で Immutable Collections を使用できるようになります
使用例
using Izzo.Collections.Immutable; using UnityEngine; public sealed class Example : MonoBehaviour { private void Awake() { var list = ImmutableList.Create( 1, 2, 3 ); list.Add( 4 ); list.Remove( 1 ); // 1,2,3 Debug.Log( string.Join( ",", list ) ); } }
例えば ImmutableList を使用して Add や Remove を呼び出しても list 自体は変化しない
using Izzo.Collections.Immutable; using UnityEngine; public sealed class Example : MonoBehaviour { private void Awake() { var list = ImmutableList.Create( 1, 2, 3 ); var addedList = list.Add( 4 ); var removedList = addedList.Remove( 1 ); // 1,2,3,4 Debug.Log( string.Join( ",", addedList ) ); // 2,3,4 Debug.Log( string.Join( ",", removedList ) ); } }
変化後の状態は戻り値で受け取ることができる
using Izzo.Collections.Immutable; using System.Collections.Generic; public sealed class Example { private List<int> m_list = new List<int>(); public ImmutableList<int> List => m_list.ToImmutableList(); }
リストを外部に公開したい時に ToImmutableList することで
不変なリストとして公開することもできる