NameValueCollection

(转自 http://www.studyofnet.com/news/623.html)

NameValueCollection类集合是基于 NameObjectCollectionBase 类,但与 NameObjectCollectionBase 不同,

该类在一个键下存储多个字符串值(就是键相同,值就连接起来),每个元素都是一个键/值对。

NameValueCollection类的命名空间为:using System.Collections.Specialized

NameValueCollection中当存在一个key的时候,你在add的话,会追加进当前key中,而不是简单替换。

例如

C# 代码   复制

 NameValueCollection myCol = new NameValueCollection();
 myCol.Add("red", "rojo");//如果键值red相同结果合并 rojo,rouge
 myCol.Add("green", "verde");
 myCol.Add("blue", "azul");
 myCol.Add("red", "rouge");

一、NameValueCollection属性

AllKeys 该属性可以获取NameValueCollection 中的所有键。返回一个字符串数组。
Count 该属性获取NameValueCollection包含键值对的数目,返回一个int。
Item 该属性表明NameValueCollection可以通过索引访问,如nvc[1],nvc["key"].
Keys 该属性获取 NameObjectCollectionBase.KeysCollection 实例,该实例包含 NameObjectCollectionBase 实例中的所有键。
IsReadOnly 获取或设置一个值,通过该值指示 NameObjectCollectionBase 实例是否为只读的。

二、NameValueCollection方法 

Add 将项添加到当前 NameValueCollection。例如:一个参数是将一个NameValueCollection复制到当前NameValueCollection,两个就是一个键值对。
Clear 使缓存数组无效,并清空NameValueCollection。
CopyTo 从目标数组的指定索引处开始将整个 NameValueCollection 复制到兼容的一维 Array。
Get 获取 NameValueCollection 中指定项的值,可以通过key或索引号访问。
GetEnumerator 返回循环访问 NameObjectCollectionBase 的枚举数。
GetKey 获取 NameValueCollection 的指定索引处的键。
GetValues 获取 NameValueCollection 中指定项的值。返回一个字符串数组,为什么要返回一个数组呢?因为一个值里面可能会包括多个项。
HasKeys 获取一个值,该值指示 NameValueCollection 是否包含非空引用的键。即有键值对且键不为null就返回true,否则返回false。可用于判断对象是否为空。
Remove 移除 NameObjectCollectionBase 实例中具有指定键的项。只能够根据键key移除项,不能用索引移除。
Set 根据键值对重新设置一个项目。
OnDeserialization 实现 ISerializable 接口,并在完成反序列化之后引发反序列化事件。 

三、NameValueCollection获取URL参数

C# 代码   复制

        public static NameValueCollection ParseQueryString(string url)

        {
            NameValueCollection cPar = new NameValueCollection();
            url = url.StartsWith("?") ? url.Substring(1) : url;
            string[] pairs = url.Split(new char[] { ‘&‘ });
            int tmpIndex;
            foreach (string pair in pairs)
            {
                if (string.IsNullOrEmpty(pair))
                    continue;
                tmpIndex = pair.IndexOf(‘=‘);
                if (tmpIndex == -1)
                    continue;
                cPar.Add(pair.Substring(0, tmpIndex), pair.Substring(tmpIndex + 1));
            }
            return cPar;
        }

四、NameValueCollection使用示例

C# 代码   复制

using System;  using System.Collections;

using System.Collections.Specialized;

namespace SamplesNameValueCollection

{
    class Program
    {

        public static void Main()
        {
            //初始化NameValueCollection需引用using System.Collections.Specialized;
            NameValueCollection myCol = new NameValueCollection();
            myCol.Add("red", "rojo");//如果键值red相同结果合并 rojo,rouge
            myCol.Add("green", "verde");
            myCol.Add("blue", "azul");
            myCol.Add("red", "rouge");

            // Displays the values in the NameValueCollection in two different ways.
            //显示键,值
            Console.WriteLine("Displays the elements using the AllKeys property and the Item (indexer) property:");
            PrintKeysAndValues(myCol);
            Console.WriteLine("Displays the elements using GetKey and Get:");
            PrintKeysAndValues2(myCol);

            // Gets a value either by index or by key.
            //按索引或值获取
            Console.WriteLine("Index 1 contains the value {0}.", myCol[1]);//索引1的值
            Console.WriteLine("Key /"red/" has the value {0}.", myCol["red"]);//键为red的对应值rouge
            Console.WriteLine();

            // Copies the values to a string array and displays the string array.
            String[] myStrArr = new String[myCol.Count];
            myCol.CopyTo(myStrArr, 0);
            Console.WriteLine("The string array contains:");
            foreach (String s in myStrArr)
                Console.WriteLine("   {0}", s);
            Console.WriteLine();

            //查找green键值然后删除
            myCol.Remove("green");
            Console.WriteLine("The collection contains the following elements after removing /"green/":");
            PrintKeysAndValues(myCol);

            //清空集合
            myCol.Clear();
            Console.WriteLine("The collection contains the following elements after it is cleared:");
            PrintKeysAndValues(myCol);

        }
        //显示键,值
        public static void PrintKeysAndValues(NameValueCollection myCol)
        {
            IEnumerator myEnumerator = myCol.GetEnumerator();
            Console.WriteLine("   KEY        VALUE");
            foreach (String s in myCol.AllKeys)
                Console.WriteLine("   {0,-10} {1}", s, myCol[s]);
            Console.WriteLine();
        }
        //显示索引, 键,值
        public static void PrintKeysAndValues2(NameValueCollection myCol)
        {
            Console.WriteLine("   [INDEX] KEY        VALUE");
            for (int i = 0; i < myCol.Count; i++)
                Console.WriteLine("   [{0}]     {1,-10} {2}", i, myCol.GetKey(i), myCol.Get(i));
            Console.WriteLine();
        }
    }

}

五、NameValueCollection与Hashtable的区别

NameValueCollection 键允许重复.

HashTable 是键-值集合,但键不能出现重复.

时间: 2024-10-10 10:22:12

NameValueCollection的相关文章

C# NameValueCollection

一个简单的例子 NameValueCollection markStatus = new NameValueCollection();            string[] values = null; markStatus.Add("Very High", "80");            markStatus.Add("High", "60");            markStatus.Add("medi

.NET C#: NameValueCollection

NameValueCollection class is in System.Collection.Specialized assembly. Unlike with HashTable, NameValueCollection can have more than one values for one key. So there is no error for code below: NameValueCollection myCol = new NameValueCollection();

字符串拼接 拆分 NameValueCollection qscoll = HttpUtility.ParseQueryString(result)

string result = "sms&stat=100&message=发送成功"; string d = HttpUtility.ParseQueryString(result).Get("stat"); string dd = HttpUtility.ParseQueryString(result).Get("message"); string ddd = HttpUtility.ParseQueryString(resu

convert NameValueCollection/Dictionary&lt;string, object&gt; to JSON string

var col=HttpContext.Current.Request.Form; Dictionary<string, object> dict = new Dictionary<string, object>(); foreach (var key in col.AllKeys) { //dict.Add(k, col[k]); string[] values = col.GetValues(key); if (values.Length == 1) { dict.Add(ke

NameValueCollection详解

1.NameValueCollection类集合是基于 NameObjectCollectionBase 类.但与 NameObjectCollectionBase 不同,该类在一个键下存储多个字符串值(就是键相同,值就连接起来如下例子).该类可用于标头.查询字符串和窗体数据.每个元素都是一个键/值对.NameValueCollection 的容量是 NameValueCollection 可以保存的元素数.NameValueCollection 的默认初始容量为零.随着向 NameValueC

使用OAuth打造webapi认证服务供自己的客户端使用

一.什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前的版本是2.0版.注意是Authorization(授权),而不是Authentication(认证).用来做Authentication(认证)的标准叫做openid connect,我们将在以后的文章中进行介绍. 二.名词定义 理解OAuth中的专业术语能够帮助你理解其流程模式,OAuth中常用的名词术语有4个,为了便于理解这些术语,我们先假设一个很常见的授权场景: 你访问了一个日志网站(thir

Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案 (精髓)

前言 刚开始创建MVC与Web API的混合项目时,碰到好多问题,今天拿出来跟大家一起分享下.有朋友私信我问项目的分层及文件夹结构在我的第一篇博客中没说清楚,那么接下来我就准备从这些文件怎么分文件夹说起.问题大概有以下几点: 1.项目层的文件夹结构 2.解决MVC的Controller和Web API的Controller类名不能相同的问题 3.给MVC不同命名空间的Area的注册不同的路由 4.让Web API路由配置也支持命名空间参数 5.MVC及Web API添加身份验证及错误处理的过滤器

WebApi基于Token和签名的验证

最近一段时间在学习WebApi,涉及到验证部分的一些知识觉得自己并不是太懂,所以来博客园看了几篇博文,发现一篇讲的特别好的,读了几遍茅塞顿开(都闪开,我要装逼了),刚开始读有些地方不理解,所以想了很久,因此对原文中省略的部分这里做一点个人的理解和补充,非常基础,知道的园友就不需要了,只是帮助初次学习的园友理解.原文传送门: http://www.cnblogs.com/MR-YY/p/5972380.html#!comments 本篇博文中的所有代码均来自上述链接,如果你觉得有帮助,请点击链接给

Quartz.NET简介及入门指南

Quartz.NET简介 Quartz.NET是一个功能完备的开源调度系统,从最小的应用到大规模的企业系统皆可适用. Quartz.NET是一个纯净的用C#语言编写的.NET类库,是对非常流行的JAVA开源调度框架 Quartz 的移植. 入门指南 本入门指南包括以下内容: 下载 Quartz.NET 安装 Quartz.NET 根据你的特定项目配置 Quartz 启动一个样例程序 下载和安装 你可以下载 zip 文件或使用 Nuget 程序包.Nuget 程序包只包含 Quartz.NET 运