NameValueCollection学习随笔

NameValueCollection继承自NameObjectCollectionBase,然而,与NameObjectCollectionBase不同,该类可以在单个键(key)下存储多个字符串值(即可以添加相同的Key)。此类型的集合不会保留元素的排序,并且枚举集合时不会保证特定排序。

NameValueCollection初始化时,涉及三个概念:容量(capacity )、哈希码提供者、比较器
无参构造函数 NameValueCollection()初始化实例时,该实例元素为空且具有默认初始容量(默认容量为0),并使用不区分大小写的默认哈希代码提供程序和不区分大小写的默认比较器。

Capacity

NameValueCollection的容量(Capacity )可以在实例化时通过构造函数指定。随着元素的添加,它的容量将自动根据需要重新分配。

哈希码提供者

哈希码提供者为NameValueCollection中的键分配哈希码。默认的哈希代码提供程序是CaseInsensitiveHashCodeProvider。

比较器

比较器确定两个键是否相等。默认的比较器是一个 CaseInsensitiveComparer,它使用不变区域性的约定;也就是说,默认情况下键比较是不区分大小写的。
要执行区分大小写的键比较,调用构造函数NameValueCollection(IEqualityComparer),并提供 StringComparer.CurrentCulture, StringComparer.InvariantCulture或 StringComparer.Ordinal 作为
equalityComparer参数。

示例

默认情况下键不区分大小写,键默认为小写,示例如下:

NameValueCollection nv = new NameValueCollection();

nv.Add("red","草莓");
nv.Add("RED", "樱桃");
nv.Add("green", "青枣");
nv.Add("Green", "青柠檬");
nv.Add("yellow", "香蕉");

foreach (var key in nv.AllKeys)
{
    Console.WriteLine($"{key}的水果有:{nv.Get(key)}");
}
Console.ReadKey();

在这里插入图片描述

如果键需要区分大小写,需要在实例化时指定IEqualityComparer参数:StringComparer.Ordinal

NameValueCollection nv = new NameValueCollection(StringComparer.Ordinal);

nv.Add("red","草莓");
nv.Add("RED", "樱桃");
nv.Add("green", "青枣");
nv.Add("Green", "青柠檬");
nv.Add("yellow", "香蕉");

foreach (var key in nv.AllKeys)
{
    Console.WriteLine($"{key}的水果有:{nv.Get(key)}");
}

Console.ReadKey();

在这里插入图片描述

注意

key和value是string类型。
引用:using System.Collections.Specialized;
读取相同的key时,输出结果对Value进行了合并,这就是NameValueCollection与一般键值对的主要区别所在。

https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.specialized.namevaluecollection?view=net-7.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ts16dmy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值