C#中泛型的使用
命名空间:using System.Collections.Generic;
普通数组:在声明时必须制定数组的长度和数据类型;ArrayList:数组元素数据类型和长度不受限制,但效率稍微低些;泛型:类似于数组功能,其长度不受限制,数据类型在声明时必须指定。
C#中预定义了集中常用的泛型类,如:List<T>、Dictionary<TKey, TValue>、Queue<T>等等
1. List<T>
语法: List<类型> 变量 = new List<类型>(); List<类型> 变量 = new List<类型> { XXX, XXX, XXX}; // 声明并初始化
示例1:简单实用:声明、初始化、赋值、读取等操作。在下例中可以看出,变量list1可以任意的添加元素,长度不受限制。
// 声明方式1 List list1 = new List(); list1.Add(211); list1.Add(985); // 声明方式2 List list2 = new List { 211, 985 }; list2.Add(136); for (int i = 0; i < list2.Count; i++) { Console.Write(list2[i].ToString()); }
2. Dictionary<TKey, TValue>
上例中泛型变量list1中存储的元素是Int类型的变量,而在实际的应用当中往往要比这更加复杂。Dictionary<Tkey, TValue>泛型类为C#预定义的泛型类,它所存储的每个元素由一对{key:value}两个变量组成。
- 每个元素可以理解为一行记录,Key为主键,必须唯一,可以为Int、String等类型。
- Value项可以为任意类型,可以是Int、String、数组等,也可以是实例化的对象。
① 简单使用
class Program { static void Main(string[] args) { // 实例化三个User对象 User user1 = new User("李宁", 21); User user2 = new User("耐克", 42); User user3 = new User("阿迪", 31); // 声明Dictionary泛型变量users // Key的类型为Int;Value的类型为User Dictionary<int, User> users = new Dictionary<int, User>(); // 向users添加“元素”,“元素”的key不能重复 users.Add(2, user1); users.Add(3, user2); users.Add(5, user3); // 循环遍历每个“元素” foreach (var p in users) { Console.Write(p.Key); Console.Write(p.Value.name); Console.Write(p.Value.age); } // 直接遍历元素的Values foreach (User u in users.Values) { Console.Write(u.name); Console.Write(u.age); } } } // User类 class User { public string name; // 姓名 public int age; // 年龄 public User(string name, int age) { this.name = name; this.age = age; } }
② 作为参数使用
class Program { static void Main(string[] args) { User user1 = new User("李宁", 21); User user2 = new User("耐克", 42); User user3 = new User("阿迪", 31); Dictionary<int, User> users = new Dictionary<int, User>(); users.Add(2, user1); users.Add(3, user2); users.Add(5, user3); Program.show(users); // 将泛型变量作为函数参数使用 } // 注意参数类型的书写格式 static void show(Dictionary<int, User> list) { foreach (var p in list) { Console.Write(p.Key); Console.Write(p.Value.name); Console.Write(p.Value.age); } } } class User { public string name; // 姓名 public int age; // 年龄 public User(string name, int age) { this.name = name; this.age = age; } }