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

了解 C# 中泛型与非泛型集合

admin
2024年11月15日 10:57 本文热度 285

前言

在 C# 中,集合可以分泛型集合和非泛型集合两种主要类型。两种集合类型在类型、安全性、可用性和性能特征等方面有所不同。而在大多数情况下,建议使用泛型集合,因为它执行速度比非泛型集合快,并且通过提供编译时错误来最大限度地减少异常。本文了解泛型非泛型集合两种类型的概述。

泛型集合

1、概述

泛型集合类型可以用来储存任何类型的数据,由 Collections.Generic 命名空间提供。

HashSet<string> hashSet = new HashSet<string>();List<int> numbers = new List<int>();

2、特

  • 类型安全

提供强大的类型安全性,在声明元素时,允许指定包含的元素类型。类型的安全性在编译时强制执行,以防止与类型相关的运行时错误。

  • 可用性

在从集合中检索元素时无需显式强制转换,对使用者更友好,在编码时,可以使用强类型元素,使代码更具可读性且不易出错。

  • 性能

避免装箱和取消装箱的开销,使得在执行速度和内存使用方面都更有效。为值类型提供了更好的性能,并且在检索元素时不需要强制转换。

3、示例

  • List<T> (列表)

// 定义数字列表List<int> numbers = new List<int>();// 使用 Add 方法添加元素numbers.Add(1);numbers.Add(3);// 输出列表元素for (int i = 0; i < numbers.Count; i++){    Console.WriteLine(numbers[i]);}// 定义客户对象列表var customers = new List<Customer>() {     new Customer(){ Code = "Haiwei", Name="华为"},    new Customer(){ Code = "Xiaomi", Name="小米"},};// 输出列表元素foreach (var customer in customers){    Console.WriteLine(customer.Code);}
public class Customer{    public string Code { get; set; }
   public string Name { get; set; }}          

  • Dictionary<TKey, TValue> (词典)

// 定义字典Dictionary<string, int> dictionary = new Dictionary<string, int>();// 添加元素dictionary.Add("Xiaomi", 50);// 遍历元素foreach (KeyValuePair<string, int> dict in dictionary){    Console.WriteLine(dict.Key);}Console.WriteLine(dictionary["Xiaomi"]);

  • Queue<T> (队列)

// 定义字符串队列Queue<string> queues = new Queue<string>();// 添加元素queues.Enqueue("A001");queues.Enqueue("A002");// 遍历元素foreach (string queue in queues){    Console.WriteLine(queue);}

  • HashSet<T>(无序集)

// 定义字符串无序集HashSet<string> languages = new HashSet<string>();// 添加元素languages.Add("English");languages.Add("Simplified");languages.Add("Traditional");// 遍历元素foreach (var language in languages){    Console.WriteLine(language);}

  • LinkedList<T> (链表)

// 定义整数链表LinkedList<int> linkedList = new LinkedList<int>();// 添加元素linkedList.AddLast(11);linkedList.AddFirst(12);// 判断元素if (linkedList.Contains(11)){    Console.WriteLine("链表中存在11");}// 遍历元素foreach (int item in linkedList){    Console.WriteLine(item);}

  • SortedSet<T> (有序集)

// 定义字符串堆栈Stack<string> stacks = new Stack<string>();// 添加元素stacks.Push("one");stacks.Push("two");// 遍历元素foreach (string stack in stacks){    Console.WriteLine(stack);}

非泛型集合

1、概述

非泛型集合主要用于存储多种类型的对象,具有较高的灵活性,但性能和类型安全性较差。由 System.Collections 命名空间提供。

ArrayList list = new ArrayList();Hashtable hashtable = new Hashtable();

2、特

  • 类型安全

非泛型集合将元素存储为对象类型,并且在检索元素时通常需要显式强制转换,因此它不是类型安全的。与类型相关的错误只能在运行时发现。

  • 可用性

在处理元素时涉及强制转换和装箱/取消装箱操作,由于强制转换会使代码的可读性降低且更容易出错,从而降低其可用性。

  • 性能

由于存在装箱和取消装箱,使得非泛型集合可能会产生性能开销,可能会导致性能下降,尤其在使用类型

3、示例

  • ArrayList(动态数组)

// 定义非泛型动态数组ArrayList arrayLists = new ArrayList();// 添加整数元素arrayLists.Add(1);// 添加字符串元素arrayLists.Add("A");// 添加布尔值元素arrayLists.Add(true);// 遍历元素for (int i = 0; i < arrayLists.Count; i++){    Console.WriteLine(arrayLists[i]);}

  • Hashtable(哈希表)

// 定义哈希表Hashtable hashtable = new Hashtable();// 添加A键值为 1hashtable.Add("A", 1);// 添加B键值为 truehashtable.Add("B", true);// 添加C键值为 C0001hashtable.Add("C", "C0001");// 遍历元素foreach (DictionaryEntry entry in hashtable){    Console.WriteLine(entry.Value );}// 移除元素hashtable.Remove("A");

  • Queue(队列)

// 定义非泛型队列Queue queues = new Queue();// 添加元素queues.Enqueue(1);queues.Enqueue("A001");queues.Enqueue(2);queues.Enqueue("A002");

  • Stack(堆栈)

// 定义非泛型堆栈Stack stacks = new Stack();// 添加元素stacks.Push("A");stacks.Push(1);stacks.Push(true);
// 输出 true 时会报异常 无法将类型为“System.Boolean”的对象强制转换为类型“System.String”foreach (string stack in stacks){    Console.Write(stack);}

  • SortedList(排序列表)

// 定义非泛型排序列表SortedList sortedLists = new SortedList();// 添加元素nsortedLists.Add("001", "Haiwei");nsortedLists.Add("002", "Xiaomi");// 判断元素if (sortedLists.ContainsValue("Haiwei")){    Console.WriteLine("值已存在");}else{    sortedLists.Add("003", "Haiwei");}// 遍历元素foreach (string sortedList in sortedLists.Keys){    Console.WriteLine(sortedList);}

小结

与非泛型集合相比,C# 中的泛型集合在类型安全性、性能和易用性方面具有显著优势。在大多数情况下,建议使用泛型集合为首选方案。


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