The System.Collections.Immutable NuGet package provides immutable collection classes.
Creating and adding items
var stack = ImmutableStack.Create<int>();
var stack2 = stack.Push(1); // stack is still empty, stack2 contains 1
var stack3 = stack.Push(2); // stack2 still contains only one, st...