ImmutableList в C#
Класс ImmutableList ведёт себя как список, но каждая правка возвращает новый экземпляр. Старая ссылка при этом не меняется: список можно отдать другому коду, и тот не перепишет исходные элементы.
Новая версия не копирует все элементы подряд: общая часть хранится один раз для обеих версий. Поэтому добавление дешевле полного копирования массива, но дороже, чем добавление в обычный List<T>.
Добавим элемент к исходному списку и сравним длины. tags не изменился, extended содержит третий элемент:
using System.Collections.Immutable;
ImmutableList<string> tags = ImmutableList.Create("a", "b");
ImmutableList<string> extended = tags.Add("c");
Console.WriteLine(tags.Count); // выведет 2
Console.WriteLine(extended.Count); // выведет 3
Соберите неизменяемый список из строк "paris" и "rome", добавьте "oslo" и выведите длину старого списка и нового.