惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
T
Tailwind CSS Blog
月光博客
月光博客
爱范儿
爱范儿
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
GbyAI
GbyAI
腾讯CDC
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
MongoDB | Blog
MongoDB | Blog
Microsoft Azure Blog
Microsoft Azure Blog
IT之家
IT之家
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
云风的 BLOG
云风的 BLOG
U
Unit 42
博客园 - 三生石上(FineUI控件)
A
About on SuperTechFans
N
Netflix TechBlog - Medium
Google DeepMind News
Google DeepMind News
雷峰网
雷峰网
L
LangChain Blog

博客园 - 金大侠

基于Extjs web设计器 Sqlserver 差异备份 DataTable使用方法总结 大话prototype Js生成组织结构图 关于读取windows域的用户最后登录时间 经典javascript 一行文字显示不了,用...替代解决方案 .net 发送邮件 .net生成略缩图 将word转换成其它文件 数据挖掘 Web 控件库 SQL Server 2005 在MDX中的新特性 客户端访问WebService Smart Client 解决导出Excel格式问题 asp.net优化方案 windows2008 IIS7.0使用手记 图片推理1
泛型学习
金大侠 · 2008-08-13 · via 博客园 - 金大侠
 

泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的装箱和拆箱。
    很多非泛型集合类都有对应的泛型集合类,下面是常用的非泛型集合类以及对应的泛型集合类:

非泛型集合类

泛型集合类

ArrayList

List<T>

HashTable

DIctionary<T>

Queue

Queue<T>

Stack

Stack<T>

SortedList

SortedList<T>


   
我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类。我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和拆箱的负担,如果我们操纵的数据类型相对确定的化 用 Dictionary<TKey,TValue> 集合类来存储数据就方便多了,例如我们需要在电子商务网站中存储用户的购物车信息( 商品名,对应的商品个数)时,完全可以用 Dictionary<string, int> 来存储购物车信息,而不需要任何的类型转化。

    下面是简单的例子,包括声明,填充键值对,移除键值对,遍历键值对

    Dictionary<

stringstring> myDic = new Dictionary<stringstring>();
    myDic.Add(
"aaa""111");
    myDic.Add(
"bbb""222");
    myDic.Add(
"ccc""333");
    myDic.Add(
"ddd""444");
    
//如果添加已经存在的键,add方法会抛出异常
    try
    {
        myDic.Add(
"ddd","ddd");
    }
    
catch (ArgumentException ex)
    {
        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 (KeyNotFoundException ex)
    {
        Console.WriteLine(
"没有找到键引发异常:" + ex.Message);
    }
    
//解决上面的异常的方法是使用ContarnsKey() 来判断时候存在键,如果经常要取健值得化最好用 TryGetValue方法来获取集合中的对应键值
    string value = "";
    
if (myDic.TryGetValue("fff"out value))
    {
        Console.WriteLine(
"不存在的键""fff""的键值为:" + value );
    }
    
else
    {     
        Console.WriteLine(
"没有找到对应键的键值"); 
    }
    
    
//下面用foreach 来遍历键值对
    //泛型结构体 用来存储健值对
    foreach (KeyValuePair<stringstring> kvp in myDic)
    {
        Console.WriteLine(
"key={0},value={1}", kvp.Key, kvp.Value);
    }
    
//获取值得集合
    foreach (string s in myDic.Values)
    {
        Console.WriteLine(
"value={0}", s);
    }
    
//获取值得另一种方式
    Dictionary<stringstring>.ValueCollection values = myDic.Values;
    
foreach (string s in values)
    {
        Console.WriteLine(
"value={0}", s);
    }