C#泛型Dictionary的用法实例详解
本文以实例形式讲述了C#中的泛型Dictionary的用法。具有很好的实用价值。分享给大家供大家参考。具体如下:
泛型最常见的用途是泛型集合,命名空间System.Collections.Generic中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的装箱和拆箱。
很多非泛型集合类都有对应的泛型集合类,下面是常用的非泛型集合类以及对应的泛型集合类:
我们用的比较多的非泛型集合类主要有ArrayList类和HashTable类。我们经常用HashTable来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和拆箱的负担,如果我们操纵的数据类型相对确定的化 用Dictionary<TKey,TValue>集合类来存储数据就方便多了,例如我们需要在电子商务网站中存储用户的购物车信息(商品名,对应的商品个数)时,完全可以用Dictionary<string,int>来存储购物车信息,而不需要任何的类型转化。
下面是简单的例子,包括声明,填充键值对,移除键值对,遍历键值对:
Dictionary<string,string>myDic=newDictionary<string,string>(); myDic.Add("aaa","111"); myDic.Add("bbb","222"); myDic.Add("ccc","333"); myDic.Add("ddd","444"); //如果添加已经存在的键,add方法会抛出异常 try { myDic.Add("ddd","ddd"); } catch(ArgumentExceptionex) { Console.WriteLine("此键已经存在:"+ex.Message); } //解决add()异常的方法是用ContainsKey()方法来判断键是否存在 if(!myDic.ContainsKey("ddd")) { myDic.Add("ddd","ddd"); } else { Console.WriteLine("此键已经存在:"); } //而使用索引器来负值时,如果建已经存在,就会修改已有的键的键值,而不会抛出异常 myDic["ddd"]="ddd"; myDic["eee"]="555"; //使用索引器来取值时,如果键不存在就会引发异常 try { Console.WriteLine("不存在的键""fff""的键值为:"+myDic["fff"]); } catch(KeyNotFoundExceptionex) { Console.WriteLine("没有找到键引发异常:"+ex.Message); } //解决上面的异常的方法是使用ContarnsKey()来判断时候存在键,如果经常要取健值得化最好用TryGetValue方法来获取集合中的对应键值 stringvalue=""; if(myDic.TryGetValue("fff",outvalue)) { Console.WriteLine("不存在的键""fff""的键值为:"+value); } else { Console.WriteLine("没有找到对应键的键值"); } //下面用foreach来遍历键值对 //泛型结构体用来存储健值对 foreach(KeyValuePair<string,string>kvpinmyDic) { Console.WriteLine("key={0},value={1}",kvp.Key,kvp.Value); } //获取值得集合 foreach(stringsinmyDic.Values) { Console.WriteLine("value={0}",s); } //获取值得另一种方式 Dictionary<string,string>.ValueCollectionvalues=myDic.Values; foreach(stringsinvalues) { Console.WriteLine("value={0}",s); }
常用的属性和方法如下:
常用属性
属性说明
获取用于确定字典中的键是否相等的
获取包含在Dictionary中的键/值对的数目。
获取或设置与指定的键相关联的值。
获取包含Dictionary中的键的集合。
获取包含Dictionary中的值的集合。
将指定的键和值添加到字典中。
从Dictionary中移除所有的键和值。
确定Dictionary是否包含指定的键。
确定Dictionary是否包含特定值。
已重载。确定两个
返回循环访问Dictionary的枚举数。
用作特定类型的哈希函数。
实现
获取当前实例的
实现System.Runtime.Serialization.ISerializable接口,并在完成反序列化之后引发反序列化事件。
确定指定的Object实例是否是相同的实例。(从
从Dictionary中移除所指定的键的值。
返回表示当前Object的
获取与指定的键相关联的值。
<?xmlversion="1.0"encoding="UTF-8"?> <data> <resourcekey="123">foo</resource> <resourcekey="456">bar</resource> <resourcekey="789">bar</resource> </data> iwanttoputthisintoaDictionary(sorted)askeyvaluepairs.i.e:123:foo,456:bar...etc thekeysareunknown. strings="<data><resourcekey=/"123/">foo</resource><resourcekey=/"456/">bar</resource><resourcekey=/"789/">bar</resource></data>"; XmlDocumentxml=newXmlDocument(); xml.LoadXml(s); XmlNodeListresources=xml.SelectNodes("data/resource"); SortedDictionary<string,string>dictionary=newSortedDictionary<string,string>(); foreach(XmlNodenodeinresources){ dictionary.Add(node.Attributes["key"].Value,node.InnerText); } linqtoxml: varxml=XDocument.Load(...); varsequence=fromeinxml.Root.Elements() letkey=(string)e.Attribute("key") orderbykey selectnew{ Key=key, Value=(string)e };
相关文章
- C#QuotedStr方法实现,引号的处理
- C#警告波预示未来将增加新的关键字
- MongoDB入门教程之C#驱动操作实例
- Redis总结笔记(二):C#连接Redis简单例子
- c#实现16进制和字符串之间转换的代码
- asp.net(C#)把汉字转化成全拼音函数(全拼)
- C#透明窗体制作实现方法比较分析
- C#生成注册码的实例代码
- C#制作鹰眼的详细全过程(带注释)实例代码
- C#生成验证码取随机数字加字母(改进版)
- C#可选参数的相关使用
- C#实现路由器断开连接,更改公网ip的实例代码
- C#中的cookie编程简单实例与说明
- C#缩略图多路径多格式保存的实例
- c#图片加密解密的实例代码
- C#将透明图片的非透明区域转换成Region的实例代码
- C#中Ilist与list的区别小结
- asp.net(C#)生成Code39条形码实例条码枪可以扫描出
- c#使用微信接口开发微信门户应用
- C#导入导出EXCEL文件的代码实例
- C#同步、异步远程下载文件实例
- c#分页显示服务器上指定目录下的所有图片示例
- C#把数字转换成大写金额的代码实例
- C#实现SMTP邮件发送程序实例
- C#设计模式之观察者模式实例讲解
- C#中使用Lambda表达式自定义比较器实现两个列表合并实例
- C#特性-对象集合初始化器介绍
- c#桥接模式(bridge结构模式)用法实例
- C#中实现输入汉字获取其拼音(汉字转拼音)的2种方法
- C#微信公众号开发之接收事件推送与消息排重的方法
- C#Pointer指针应用实例简述
- C#泛型和反射实例解析
- 使用C#的aforge类库识别验证码实例
- C#中datatable序列化与反序列化实例分析