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;
}
}
C#中泛型的使用的更多相关文章
- 2.C#中泛型在方法Method上的实现
阅读目录 一:C#中泛型在方法Method上的实现 把Persion类型序列化为XML格式的字符串,把Book类型序列化为XML格式的字符串,但是只写一份代码,而不是public static s ...
- 1.什么是泛型和C#中泛型在Class上的实现
阅读目录 一:什么是泛型? 二:C#中泛型在Class上的实现 一:什么是泛型? 我们在编程的时候需要一个数据类型,但是在刚开始的时候还不确定这个数据类型是怎么样的,或者说对于不同的多个数据类型有 ...
- C#中泛型和单链表
泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能.泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类 ...
- Java中泛型 类型擦除
转自:Java中泛型是类型擦除的 Java 泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,但有一点需要注意:Java 的泛型在编译器有效,在运行期被删除,也就是说所有泛型参数类 ...
- [转]:Delphi XE中泛型数组的使用范例
Delphi XE中泛型数组的使用范例,下面的范例简单的使用了泛型字符串数组,如用 TArray 代替 array of Word, 还可以使用 TArray 类提供的算法(就是少了点). uses ...
- C#中泛型的解释(object,list,var,dynamic的区别)
泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能.泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的 ...
- Java中泛型使用
Java中泛型使用 泛型作用: 泛型:集合类添加对象不用强转 反射机制:将泛型固定的类的所有方法和成员全部显示出来 核心代码: ArrayList<Ls> ff=new ArrayList ...
- Java中泛型区别以及泛型擦除详解
一.引言 复习javac的编译过程中的解语法糖的时候看见了泛型擦除中的举例,网上的资料大多比较散各针对性不一,在此做出自己的一些详细且易懂的总结. 二.泛型简介 泛型是JDK 1.5的一项新特性,一种 ...
- Java 中泛型的实现原理
泛型是 Java 开发中常用的技术,了解泛型的几种形式和实现泛型的基本原理,有助于写出更优质的代码.本文总结了 Java 泛型的三种形式以及泛型实现原理. 泛型 泛型的本质是对类型进行参数化,在代码逻 ...
随机推荐
- Jenkins基于角色的项目权限管理
参考博客:http://www.cnblogs.com/davidwang456/p/3701972.html 一.简介 由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三 ...
- Java enum的用法详解 (转)
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...
- Python学习笔记(四十五)网络编程(1)TCP编程
摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014320043745 ...
- eclipse中修改svn用户名和密码
开发中有时候用公共的电脑提交一些代码,eclipse没有专门的切换svn账户的功能.查阅资料得出解决办法: 1. 查看你的Eclipse 中使用的是什么SVN Interface windows & ...
- 理解 CSS 中的伪元素 :before 和 :after
CSS 的主要目的是给 HTML 元素添加样式,然而,在一些案例中给文档添加额外的元素是多余的或是不可能的.事实上 CSS 中有一个特性允许我们添加额外元素而不扰乱文档本身,这就是“伪元素”. 你一定 ...
- Eng1—English daily notes
English daily notes 2015年 4月 Phrases 1. As a side note #作为附注,顺便说句题外话,和by the way意思相近,例句: @1:As a sid ...
- 【BZOJ】3039: 玉蟾宫 悬线法
[题意]给定01矩阵,求最大全1子矩阵.n,m<=1000. [算法]动态规划(悬线法) [题解]★对于01矩阵中的任意一个全1极大子矩阵,都可以在其上边界遇到的障碍点处悬线到下边界的点x,则点 ...
- 树形DP初探•总结
这几天,我自学了基础的树形DP,在此给大家分享一下我的心得. 首先,树形DP这种题主要就是解决有明确分层次且无环的树上动态规划的题.这种题型一般(注意只是基础.普通的情况下)用深度优先搜索来解决实 ...
- Master of Phi (欧拉函数 + 积性函数的性质 + 狄利克雷卷积)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6265 题目大意:首先T是测试组数,n代表当前这个数的因子的种类,然后接下来的p和q,代表当前这个数的因 ...
- 怎么让IIS7第一次访问相应速度加快
当我们把网站部署在IIS7或IIS6S的时候,每当IIS或是Application Pool重启后,第一次请求网站反应总是很慢,原因大家都知道(不知道可以参考这个动画说明ASP.NET网页第一个Req ...