Dictionary List类使用

本文介绍了.NET Framework中泛型集合类的应用,包括Dictionary和List类的使用方法,并对比了它们与非泛型集合类的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

泛型最常见的用途是创建集合类。 .NET Framework 类库在 System.Collections.Generic 命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如 System.Collections 命名空间中的 ArrayList HashTable 等。 下面我们就来说下,几个泛型集合类的用法:
.Dictionary  HashTable 类似 此类在 .NET Framework 2.0 版中是新增的。表示键和值的集合。命名空间 :System.Collections.Generic ,程序集 :mscorlib (在 mscorlib.dll 中)     class TestGenericList     {          static void Main()         {  // 声明对象,参数表示,键是 int 类型,值是 string 类型             Dictionary<int, string> fruit = new Dictionary<int, string>();             try{              // 加入重复键会引发异常                 fruit.Add(1, " 苹果 ");                 fruit.Add(2, " 桔子 ");                 fruit.Add(3, " 香蕉 ");                 fruit.Add(4, " 菠萝 ");               // 参数错误将引发异常 , 如下所示   //fruit.Add("5", "aa");             }             catch (ArgumentException)             {                 Console.WriteLine(" 添加错误!!! ");             }  // 因为引入了泛型,所以键取出后不需要进行 Object int 的转换,值的集合也一样             foreach (int i in fruit.Keys)             {                 Console.WriteLine(" 键是: {0}  值是: {1}",i,fruit);             }
按键值对遍历 : foreach(KeyValuePair keyValue in fruit) { Console.WriteLine(" 键是: {0}  值是: {1}", keyValue.Key, keyValue.Value); }       // 删除指定键,值             fruit.Remove(1);              // 判断是否包含指定键             if (fruit.ContainsKey(1))             {                 Console.WriteLine(" 包含此键 ");             }             // 清除集合中所有对象             fruit.Clear();         }     } Dictionary 遍历输出的顺序,就是加入的顺序,这点与 Hashtable 不同,其它方法如: ContainsKey ContainsValue Remove 等,使用方法基本一致。
二、 List 注意:此类在 .NET Framework 2.0 版中是新增的。表示可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法。命名空间 :System.Collections.Generic ,程序集 :mscorlib (在 mscorlib.dll 中), List 类是 ArrayList 类的泛型等效类。
   // 声明一个泛型类        class TestGenericList     {         static void Main()         {             // 声明一个 List 对象和 ArrayList 对应 ,只加入 string 参数             List<string> names = new List<string>();             names.Add(" 乔峰 ");             names.Add(" 欧阳峰 ");             names.Add(" 马蜂 ");             // 遍历 List             foreach (string name in names)             {                 Console.WriteLine(name);             }             // List 中插入元素             names.Insert(2, " 张三峰 ");             // 移除指定元素             names.Remove(" 马蜂 ");                    }     } 在决定使用 List 还是使用 ArrayList 类(两者具有类似的功能)时,记住 List 类在大多数情况下执行得更好并且是类型安全的。 如果对 List 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。
如果对类型 T 使用值类型,则编译器将特别针对该值类型生成 List 类的实现。这意味着不必对 List 对象的列表元素进行装箱就可以使用该元素,并且在创建大约 500 个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。
其实我们也可以自己定义一个泛型类,如下所示:    // 声明一个泛型类     public class ItemList<T>     {         void Add(T item) { }     }     class TestGenericList     {         private class ExampleClass { }         static void Main()         {             // 声明一个对象,只能加入 int             ItemList<int> list1 = new ItemList<int>();
            // 声明一个对象,只能加入 Student 类型, Student 类为自定义类             ItemList<Student> list2 = new ItemList<Student>();
        }     }
泛型的用法还有很多种,如泛型方法,泛型委托,泛型接口等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值