C# 不可变栈
需要引入Nuget包: Microsoft.Bcl.immutable
using System.Threading.Tasks;
using System.Net.Http;
using System;
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks.Dataflow;
using System.Collections.Immutable;
namespace task
{
class Program
{
static void Main(string[] args)
{
var stack = ImmutableStack<int>.Empty;
stack = stack.Push(13);
stack = stack.Push(7);
//先显示“7”,接着显示“13” 。
foreach (var item in stack)
{
Console.WriteLine(item.ToString());
}
int lastItem;
stack = stack.Pop(out lastItem);
Console.WriteLine(lastItem.ToString());//7
Console.ReadLine();
}
}
}
结果为:
在上面的例子中,值得注意的是,程序对局部变量stack 进行了覆盖。不可变集合采用的
模式是返回一个修改过的集合,原始的集合引用是不变化的。这意味着,如果引用了特定
的不可变集合的实例,它是不会变化的,具体可看下面的例子:
using System.Threading.Tasks;
using System.Net.Http;
using System;
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks.Dataflow;
using System.Collections.Immutable;
namespace task
{
class Program
{
static void Main(string[] args)
{
var stack = ImmutableStack<int>.Empty;
stack = stack.Push(13);
var biggerStack = stack.Push(7);
//先显示“7”,接着显示“13” 。
foreach (var item in biggerStack)
{
Console.WriteLine(item.ToString());
}
// 只显示“13”。
foreach (var item in stack)
{
Console.WriteLine(item.ToString());
}
Console.ReadLine();
}
}
}
结果为:
参考书籍: C#并发编程经典实例