0


理解C#里面的集合有哪些?怎么用,什么是安全集合?

在这里插入图片描述

介绍

在C#中,集合是一种用于存储和操作多个元素的数据结构。它们提供了各种操作,如添加、删除、查找等,以及遍历集合中的元素。集合通常根据其实现方式和行为特征进行分类。

**集合继承

IEnumerable

**

在C#中,几乎所有的集合类型都实现了

IEnumerable

接口或其泛型版本

IEnumerable<T>

,以支持迭代和枚举集合中的元素。这意味着它们都具有

GetEnumerator()

方法,该方法返回一个实现了

IEnumerator

接口或

IEnumerator<T>

接口的对象,用于遍历集合中的元素。

但是,并非所有集合都直接继承自

IEnumerable

接口。例如,

LinkedList<T>

继承自

System.Collections.Generic.LinkedList<T>

,而

LinkedList<T>

实现了

IEnumerable<T>

接口,但并未直接继承自

IEnumerable

。不过,由于

IEnumerable<T>

继承自

IEnumerable

,因此

LinkedList<T>

也间接地支持

IEnumerable

总的来说,虽然不是所有集合都直接继承自

IEnumerable

,但它们通常都实现了

IEnumerable

接口或其泛型版本,以支持在

foreach

循环中迭代集合中的元素。

在C#中,集合类型有很多种,每种都有其特定的使用环境和适用场景。
数组 (Array):
用于存储固定大小的同类型元素。
适用于需要快速随机访问元素的情况。

int[] numbers =newint[5]{1,2,3,4,5};

列表 (List):
用于存储可变大小的同类型元素序列。
适用于需要频繁添加或删除元素的场景。

List<string> names =newList<string>();
names.Add("Alice");
names.Add("Bob");

队列 (Queue):
用于实现先进先出(FIFO)的数据结构。
适用于任务调度、消息传递等场景。

Queue<int> queue =newQueue<int>();
queue.Enqueue(1);
queue.Enqueue(2);

栈 (Stack):
用于实现后进先出(LIFO)的数据结构。
适用于表达式求值、深度优先搜索等场景。

Stack<string> stack =newStack<string>();
stack.Push("A");
stack.Push("B");

字典 (Dictionary):
用于存储键值对集合。
适用于需要快速通过键查找值的情况。

Dictionary<string,int> ages =newDictionary<string,int>();
ages.Add("Alice",30);
ages.Add("Bob",35);

集合 (Set):
用于存储独一无二的元素。
适用于需要去重或集合运算的场景。

HashSet<int>set=newHashSet<int>();set.Add(1);set.Add(2);

链表 (LinkedList):
用于存储元素以节点形式组织的数据结构。
适用于频繁的插入和删除操作,但不适用于随机访问。

LinkedList<string> linkedList =newLinkedList<string>();
linkedList.AddLast("A");
linkedList.AddLast("B");

排序列表 (SortedList):
用于存储已排序的键值对集合。
适用于需要快速查找和有序遍历的场景。

SortedList<int,string> sortedList =newSortedList<int,string>();
sortedList.Add(3,"C");
sortedList.Add(1,"A");

有序字典 (SortedDictionary):
用于存储已排序的键值对集合。
适用于需要有序键值对集合的场景。

SortedDictionary<int,string> sortedDictionary =newSortedDictionary<int,string>();
sortedDictionary.Add(3,"C");
sortedDictionary.Add(1,"A");

可观察集合 (ObservableCollection):
用于实现数据绑定和通知变化的动态集合。
适用于需要与界面交互并实时更新的场景。

ObservableCollection<string> observableCollection =newObservableCollection<string>();
observableCollection.Add("Item 1");

键控集合 (KeyedCollection):
用于存储具有唯一键的元素集合。
适用于需要通过键进行查找和检索的场景。

publicclassPersonCollection:KeyedCollection<string, Person>{protectedoverridestringGetKeyForItem(Person item)=> item.Name;}

树形集合 (Tree):
用于存储具有层级结构的数据。
适用于表示组织结构、文件系统等场景。

// 示例:自定义树形结构publicclassTreeNode<T>{publicT Data {get;set;}publicList<TreeNode<T>> Children {get;set;}=newList<TreeNode<T>>();}

线程安全的集合
在多线程环境中,为了确保线程安全,可以使用以下线程安全的集合:

  1. ConcurrentBag<T>:用于在并行操作中存储对象的无序集合。
  2. ConcurrentDictionary<TKey, TValue>:用于在多线程环境中存储键/值对的字典。
  3. ConcurrentQueue<T>:用于在多线程环境中实现先进先出(FIFO)的队列。
  4. ConcurrentStack<T>:用于在多线程环境中实现后进先出(LIFO)的栈。
  5. BlockingCollection<T>:提供了一个线程安全的集合,用于在生产者-消费者模式中使用。

这些线程安全的集合类型能够在多线程环境中保证数据的一致性和完整性,避免出现竞态条件和死锁等问题。

标签: c# 安全 windows

本文转载自: https://blog.csdn.net/zuiyuewentian/article/details/136362352
版权归原作者 搬砖的诗人Z 所有, 如有侵权,请联系我们删除。

“理解C#里面的集合有哪些?怎么用,什么是安全集合?”的评论:

还没有评论