前言
在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 编辑过