我们在开发项目,根据实际需要,选择最适合的集合数据类型。

NameValueCollection、Dictionary<string,string>,List<Tuple<string,string>>三个类都可以表示键值对集合。

但根据使用场景的不同,建议选择不同的类型来进行相应的处理。

NameValueCollection用于键名不区分大小写,比如读取(或写入)ini文件,键名是不区分大小写的。nvc[键名]不存在将返回null,并不抛出异常。

Dictionary<string,string>用于键名必须唯一的,而且对重复键增加元素将提示异常。dict[键]如果不存在将抛出异常。

System.Collection.Speic.NameValueCollection 键Key不区分大小写。每一个键可以对应多个值【一个键对应一个字符串数组】

增加相同的键,不抛出异常,只是增加该键对应的值的数组个数+1

System.Dictionay<string,string> 键key区分大小写。dict.Add()如果键名重复,将抛出异常。dict读取不存在的键,将抛出异常。

System.List<Tuple<string,string>> 元组,键和值都可以重复。每个元组元素都是独立的。

表格如下:

键区分大小写 Add()键名相同 索引器 读取的键不存在
NameValueCollection False 允许 整体更新键对应的值 不抛出异常,返回null
Dictionary<string,string> True 不允许 整体更新键对应的值 抛出异常
List<Tuple<string,string>> True 允许

以下为测试程序。

新建.net core 3.1控制台应用程序SpecialCollectionDemo,测试代码如下:

using System;
using System.Collections.Specialized;
using System.Collections.Generic;
using System.Linq;

namespace SpecialCollectionDemo
{
    class Program
    {
        /// <summary>
        /// 声明一个测试委托
        /// </summary>
        static Action action;
        static void Main(string[] args)
        {
            action = TestNameValueCollection;
            action();
            action = TestListTuple;
            action();
            action = TestDictionary;
            action.Invoke();
            Console.ReadLine();
        }

/// <summary>
        /// 测试NameValueCollection
        /// </summary>
        static void TestNameValueCollection() 
        {
            Console.WriteLine("NameValueCollection的键名不区分大小写,Add函数当键相同时,只是增加对应的值的数组增加一个元素...");
            NameValueCollection nvc = new NameValueCollection();
            nvc.Add("ABC", "景天");
            nvc.Add("abc", "重楼");
            nvc.Add("123", "雪见");
            Console.WriteLine($"测试索引器:{nvc["ABC"]}");
            Console.WriteLine($"测试Get函数:{nvc.Get("aBc")}");
            string[] values = nvc.GetValues("abc");
            Console.WriteLine($"测试GetValues函数:{string.Join(",", values)}");
            Console.WriteLine("NameValueCollection当键不存在时,返回null");
            string testNull = nvc["hello"];
            Console.WriteLine($"NameValueCollection不存在的键hello,对应的值是否为null:{testNull == null}");
        }

/// <summary>
        /// 测试元组集合
        /// </summary>
        static void TestListTuple() 
        {
            Console.WriteLine("测试List<Tuple<string, string>>...");
            List<Tuple<string, string>> list = new List<Tuple<string, string>>();
            list.Add(Tuple.Create("ABC", "紫萱"));
            list.Add(new Tuple<string, string>("abc", "长卿"));
            list.Add(Tuple.Create("123", "龙葵"));
            list.Add(Tuple.Create("ABC", "清微"));
            list.ForEach(tuple => Console.WriteLine($"Name:{tuple.Item1},Value:{tuple.Item2}"));
        }

/// <summary>
        /// 测试字典Dictionary
        /// </summary>
        static void TestDictionary() 
        {
            Console.WriteLine("测试Dictionary<string, string>...");
            Console.WriteLine("字典Dictionary区分大小写,如果使用Add函数增加相同的键时,将抛出异常");
            Dictionary<string, string> dict = new Dictionary<string, string>();
            dict.Add("ABC", "张三");
            dict.Add("abc", "李四");
            dict["ABC"] = "石碏";//重新设置值
            dict.Add("hello", "world");
            dict["Test"] = "success";
            for (int i = 0; i < dict.Count; i++)
            {
                KeyValuePair<string,string> keyValuePair =dict.ElementAt(i);
                Console.WriteLine($"key:{keyValuePair.Key},value:{keyValuePair.Value}");
            }
            try
            {
                Console.WriteLine("测试增加相同的键...");
                dict.Add("ABC", "州吁");
            }
            catch (Exception ex) 
            {
                Console.WriteLine($"增加相同的键_出现异常:{ex.Message}");
            }
            try
            {
                Console.WriteLine("尝试读取不存在的键key");
                string testValue = dict["NotExists"];
                Console.WriteLine(testValue);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"读取不存在的键_出现异常:{ex.Message}");
            }
        }
    }
}
程序运行效果如图:

C#关于NameValueCollection,Dictionary,List Tuple比较相关推荐

  1. 巧用Dictionary实现日志数据批量插入

    背景 最近再做一个需求,就是对站点的一些事件进行埋点,说白了就是记录用户的访问行为.那么这些数据怎么保存呢,人家点一下保存一下?显然不合适,肯定是需要批量保存,提高效率. 问题窥探 首先,我想到的是D ...

  2. 基础才是重中之重~DictionaryK,V里V的设计决定的性能

    回到目录 字典对象Dictionary<K,V>我们经常会用到,而在大数据环境下,字典使用不当可能引起性能问题,严重的可能引起内在的溢出! 字典的值建议为简单类型,反正使用Tuple< ...

  3. Python Numpy学习手册(翻译自斯坦福大学 CS231n: Convolutional Neural Networks for Visual Recognition)

    1.Python简介 Python是一种高级的动态类型化多范例编程语言,也类似伪代码,举个例子,对数据排序 def quicksort(arr):if len(arr) <= 1:return ...

  4. edittext禁止换行符但能自动换行简书_使用n-gram创建自动完成系统

    n-gram语言模型用于就是计算句子的概率,通俗来讲就是判断这句话是人话的可能性有多少.n就是将句子做切割,n个单词为一组. 如何计算句子的概率?根据条件概率和链式规则 P(B|A)=P(A,B)/P ...

  5. python numpy官网_Python Numpy 教程(上)

    ------------------------------------------------------------------------------------------------ 该教程 ...

  6. Python Numpy 教程(使用 Jupyter 和 Colab)

    Colab 笔记本 本教程最初由Justin Johnson提供. 我们将在本课程的所有作业中使用 Python 编程语言.Python 本身就是一种出色的通用编程语言,但在一些流行的库(numpy. ...

  7. A02_Python(基本数据类型,容器,函数,类),Numpy(数组array,数组索引,数据类型,数组中的数学,广播)

    Python的版本 基本数据类型 与大多数语言一样,Python有许多基本类型,包括整数,浮点数,布尔值和字符串.这些数据类型的行为方式与其他编程语言相似. Numbers(数字类型):代表的是整数和 ...

  8. python对json的操作总结

    Json简介:Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式.Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式.现在也常用于h ...

  9. Serilog 最佳实践

    Serilog 最佳实践 概述 Serilog[1]是 Microsoft .NET 的结构化日志记录库,并已成为Checkout.com 上NET 的首选日志记录库.它支持各种日志记录目的地(称为接 ...

最新文章

  1. 这款工具,1分钟定位性能瓶颈,我老板都说好!
  2. 算法打卡39:喷水装置
  3. 一个稍微复杂的VTK程序
  4. T-SQL远程数据库备份还原
  5. JVM运行时内存分区
  6. 26. GD32F103C8T6入门教程-CAN外设回环测试
  7. Android中SlidingDrawer介绍【安卓进化三十四】
  8. VS C#/C++ 工具箱显示出来 工具箱不见了
  9. 前端-CSS,语法、元素、属性、动画、计算方法布局及简单实战项目
  10. vue项目强制清除页面缓存
  11. 软件测试常用的性能测试指标,7个常用的网络性能测试指标
  12. python数字图像处理以及绘图
  13. 电脑系统怎么重装win11
  14. 机器学习:分类模型大全
  15. 自学JavaScript第一天- JS 基础
  16. android的dispatchTouchEvent onInterceptTouchEvent onTouchEvent
  17. 运维实践 | 使用K3S之快速搭建精简版本K8S集群环境,助力开发测试环境!
  18. 2020年全球滤波器行业现状及竞争格局分析,市场高度集中「图」
  19. 多线程算法题:国王、毒酒、侍卫
  20. ubuntu 安装后硬盘温度较高解决办法

热门文章

  1. 大番茄插件 常用配置
  2. “地图易”数据采集工具介绍——地图数据采集神器
  3. 电脑端上面完成转换的CAD转DWF格式如何进行分享?
  4. 十一个顶级的Git 客户端,绝对很实用!
  5. SQL日志文件太大,清理方法
  6. BurpSuite武器库打造之环境搭建和API介绍(上)
  7. layui数据表格接口_layui数据表格实现重载数据表格功能(搜索功能)
  8. Java用awt编写计算器(只有加减乘除)
  9. mysql生成(月初、月末、上中下旬判断、年初、年末、季初、季末)创建日期维度表所需字段内容、函数、及说明
  10. 天梯赛练习集 L2-028 秀恩爱分得快(25分)数据储存与处理 含测试点解析