前言
在C# 编程中,不可变集合是一种特殊类型的集合,它提供不变性,确保一旦创建,其内容就无法修改。本文我们将探讨不可变集合类型的概念、重要性,以及使用它们增强数据管理的完整性和安全性。
不可变集合
1、定义
不可变集合即集合对象在创建初始化后,它们的值就无法修改,而之后的每次改变都会产生新集合。如使用一组元素初始化后,不可变集合的内容在其整个生命周期内保持不变。在 C# 中,使用不可变集合需要引用System.Collections.Immutable。
不可变集合包括:
不可变数组(ImmutableArray)
字典(ImmutableDictionary)
列表(ImmutableList)
堆栈(ImmutableStack)等。
using System;
using System.Collections.Immutable;
namespace Fountain.WinConsole.ExampleDemo
{
internal class Program
{
/// <summary>
/// 应用程序入口
/// </summary>
/// <param name="args"></param>
static void Main()
{
// 创建不可变列表集合,并初始数值
ImmutableList<int> numbers = ImmutableList.Create(10, 20, 30, 40, 50,60,70);
// 遍历集合
foreach (var number in numbers)
{
// 输出 numbers 元素
Console.WriteLine(number);
}
// 移除元素,并重新赋值给变量
numbers = numbers.Remove(20);
// 遍历集合
foreach (var number in numbers)
{
// 输出 numbers 元素
Console.WriteLine(number);
}
// 等待输入退出
Console.ReadKey();
}
}
}
2、特点
3、优势
4、示例
不变列表:下面示例演示的创建、添加和修改。
using System;
using System.Collections.Immutable;
namespace Fountain.WinConsole.ExampleDemo
{
internal class Program
{
/// <summary>
/// 应用程序入口
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
// 创建不变集合列表,并初始数值
ImmutableList<string> express = ImmutableList.Create("ZTO", "SF", "JT", "JD", "YTO");
// 遍历集合
foreach (var item in express)
{
// 输出 express 元素
Console.WriteLine(item);
}
// 将元素添加到不变列表集合中,重新赋值给变量
ImmutableList<string> updatedexpress = express.Add("YUNDA");
Console.WriteLine("将元素添加到不变列表集合中后");
// 遍历集合
foreach (var item in express)
{
// 输出 express 元素
Console.WriteLine(item);
}
// 尝试修改现有的不变列表
ImmutableList<string> modifiedexpress = express.RemoveAt(0);
Console.WriteLine("尝试修改现有的不变列表后");
// 遍历集合
foreach (var item in express)
{
// 输出 express 元素
Console.WriteLine(item);
}
// 等待输入退出
Console.ReadKey();
}
}
}
示例说明:从执行效果看,添加、修改都没有改变 express 的元素内容。而是分别使用了新的集合列表存储。
下面的示例,演示了不变字典的创建、修改和访问。修改后的字典也创建新的字典。
using System;
using System.Collections.Immutable;
namespace Fountain.WinConsole.ExampleDemo
{
internal class Program
{
/// <summary>
/// 应用程序入口
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
// 创建不变集合字典列表,并初始数值
ImmutableDictionary<string, int> expressCount = ImmutableDictionary<string, int>.Empty
.Add("ZTO", 100)
.Add("SF", 200)
.Add("JT", 90)
.Add("YUNDA", 180)
.Add("JD", 150);
// 访问指定键SF的值
int sfCount = expressCount["SF"];
Console.WriteLine(string.Format("键:{0} 值:{1}", "SF", sfCount));
// 修改现有的不变词典,修改后的结果,生成新的字典
ImmutableDictionary<string, int> modifiedExpressCount = expressCount.Remove("SF");
// 遍历集合
foreach (var item in modifiedExpressCount.Keys)
{
// 输出 modifiedExpressCount 元素
Console.WriteLine(string.Format("键:{0} 值:{1}", item, modifiedExpressCount[item]));
}
//
Console.ReadKey();
}
}
}
小结
不可变集合在编程中,能起到至关重要的作用,它提供不变性和数据完整性的优势。在了解不变集合的重要性和功能,可以利用它们来构建更健壮和线程安全的程序。
阅读原文:原文链接
该文章在 2024/12/30 14:58:48 编辑过