LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

探讨 C# 中不可变集合

admin
2024年12月28日 21:37 本文热度 24

前言

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 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved