- A+
上篇文章讲述了C#委托和事件知识点,本文将介绍C#集合知识点。作为.NET开发人员,C#集合是你在构建强大和高效应用程序时的关键技能之一。C#集合提供了一系列丰富的数据结构,可以帮助你更好地管理、操作和组织数据。本文将介绍一些每个.NET开发人员都应该掌握的C#集合知识点。
1、灵活的List
List
List<string> tasks = new List<string>();//string也可以换成属性类等 tasks.Add("欢迎关注"); tasks.Add("公众号"); tasks.Add("公众号s"); tasks.Add("DOTNET开发跳槽"); tasks.Remove("公众号s"); foreach (var item in tasks) { Console.Write(item); }
在try.dot.net的输出结果
2、完美的键值对Dictionary<TKey, TValue>
Dictionary也是C#比较重要的集合之一。Dictionary<TKey, TValue> 提供了一种用于存储键值对的高效方法。你可以根据键快速检索对应的值,如果你需要快速查找和映射数据,使用它效率杠杠的。它是构建缓存、映射和快速查找的理想选择。
案例如下:
Dictionary<int, Student> studentDictionary = new Dictionary<int, Student> { { 1, new Student("刘婵") }, { 2, new Student("关兴") }, { 3, new Student("张包") } }; Student guanxing = studentDictionary[1]; // 通过ID查找学生 Console.WriteLine(guanxing.Name);//输出结果:刘婵 //声明的记录类型 public record Student(string Name);
3、避免重复的HashSet
HashSet 是一个无序、不重复的元素集合。它实现了 ICollection
案例如下:
HashSet<int> likedPosts = new HashSet<int>(); likedPosts.Add(101); likedPosts.Add(102); likedPosts.Add(101); // 重复元素不会被添加 foreach (var item in likedPosts) { Console.WriteLine(item); } bool alreadyLiked = likedPosts.Contains(101); // 检查是否已存在
4、万能集合操作的LINQ
LINQ(语言集成查询)是为集合而生,它是.NET中的一项强大功能,它允许你在集合中执行各种查询和操作。通过使用 LINQ,你可以轻松地进行过滤、排序、映射等操作,而无需编写繁琐的循环代码。
这里就不举例了,大家可以看我的前一篇文章:每个.NET开发都应掌握的linq知识点
5、 多线程安全的选择“并发集合”
在.NET多线程应用程序中,需要主要集合线程安全地操作。.NET提供了一系列线程安全的集合,如 ConcurrentDictionary<TKey, TValue>、ConcurrentQueue
ConcurrentDictionary<int, string> onlineUsers = new ConcurrentDictionary<int, string>(); onlineUsers.TryAdd(1, "关注公众号"); onlineUsers.TryAdd(2, "DOTNET开发跳槽"); onlineUsers.TryAdd(3, "获取面试题"); string user; bool found = onlineUsers.TryGetValue(2, out user); // 安全地访问数据 if (found) Console.WriteLine(user); //输出:DOTNET开发跳槽
6、C#自定义集合
在C#中,你可以根据需求创建自定义集合类型,以满足特定需求并提供更好的抽象和功能。下面是一个简单的示例,展示创建一个自定义的简单集合类。
using System; using System.Collections; using System.Collections.Generic; // 自定义集合类 public class MyCollection<T> : IEnumerable<T> { private List<T> items = new List<T>(); // 添加元素 public void Add(T item) { items.Add(item); } // 实现IEnumerable<T>接口的GetEnumerator方法 public IEnumerator<T> GetEnumerator() { return items.GetEnumerator(); } // 实现非泛型IEnumerable接口的GetEnumerator方法 IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } class Program { static void Main(string[] args) { MyCollection<string> srts = new MyCollection<string>(); srts.Add("刘邦"); srts.Add("项羽"); srts.Add("秦二"); foreach (var item in srts) { Console.WriteLine(item); } } }
在try.dot.net的输出结果
7、集合与IEnumerable
C#中IEnumerable
IEnumerable
从这个角度来看,集合类型可以看作是实现了 IEnumerable
8、集合的三种类型
集合通过它们的命名空间可以分为以下三类:
1)System.Collections.Generic 类
System.Collections.Generic 命名空间中的类提供了通用的泛型集合类型。这些集合在性能和类型安全性方面通常都比非泛型的 System.Collections 类更好。
一些常见的 System.Collections.Generic 类:
List
LinkedList
Queue
2)System.Collections.Concurrent 类
System.Collections.Concurrent 命名空间中的类提供了线程安全的集合,适用于多线程环境下的并发操作。这些集合在多线程应用中能够提供更好的性能和可靠性。
一些常见的 System.Collections.Concurrent 类:
ConcurrentDictionary<TKey, TValue>:线程安全的键值对集合。
ConcurrentQueue
ConcurrentStack
3)System.Collections 类
System.Collections 命名空间中的类是 .NET Framework 中早期的集合实现,它们不是泛型的,并且性能相对较低。然而,由于历史原因和向后兼容性,它们仍然在代码中使用。
一些常见的System.Collections 类:
ArrayList、Hashtable、Queue 和 Stack
结语
以上只列出了部分C#集合的详解,C#中还有最基本的数组类型、Queue
希望本文对你有所收获,对于C#集合的知识点,你还知道哪些?欢迎留言讨论或者吐槽本文。
参考:
1、微软官方文档 :
learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/collections
2、chatgpt
来源公众号:DotNet开发跳槽