C#中的泛型化方法的实现
在一个基本数据类型的方法中求解最大值或者最小值是一件很方便,同时也是很简单的事。但是如果你想复用这个方法,我们就需要使用到泛型编程的概念了。这就好比是C++中的模板函数,或者java中的泛型操作。相比而言。C#的语法和Java的语法表现出了惊人的一致。
下面我们先看一个简单的例子吧
public static object getMinValue(object[] array){IComparable min = (IComparable)array[0];foreach(object i in array){if (((IComparable)i).CompareTo(min)<0){min = (IComparable)i;}}return min;}
注意:这里使用了static来修饰该方法,是因为我直接在static void Main()方法中调用了这个方法,所以才加的这个关键字。
但是这样做看似合理也正确,却会报出类型转换错误的异常。所以这仍然是行不通的。我们需要借助于where T :约束条件来进行处理
所以修改成如下代码:
public static T getMinValue<T>(T[] array) where T: IComparable<T>{T min = array[0];foreach(T i in array){if ((i).CompareTo(min)<0){min = i;}}return min;}
好了,这次在运行程序。就不会报出错误了。
总结:
IComparable接口定义了一个CompareTo的方法,这样就可以让object类型的值进行比较了。
优点:使得C#泛型编程更加完善,实现了代码一次编写的良好的复用效果!
C#中的泛型化方法的实现相关推荐
- Anders Hejlsberg谈C#、Java和C++中的泛型
Anders Hejlsberg谈C#.Java和C++中的泛型 [翻译] lover_P 2004-03-25 ------------------------------------------- ...
- [转]Anders Hejlsberg谈C#、Java和C++中的泛型
[翻译] lover_P 2004-03-25 原著:Bill Venners.Bruce Eckel 2004.2.26 原文:http://www.artima.com/intv/generic ...
- 【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
C++ 泛型编程 中的泛型算法和STL(sort,find,find) 1. 引言 1.1 简述泛型编程和STL的重要性 1.2 介绍泛型算法的基本概念 2. STL中的泛型算法 2.1 定义及主要特 ...
- Java中创建泛型数组
Java中创建泛型数组 使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组 T[] array = new T[]; 当我们写出这样的代码时编译器会报Cannot create a gen ...
- 技术图文:C#语言中的泛型 II
C#语言中的泛型 II 知识结构: 6. 泛型接口 泛型类与泛型接口结合使用是很好的编程习惯,比如用IComparable<T>而非IComparable,以避免值类型上的装箱和拆箱操作. ...
- 技术图文:C#语言中的泛型 I
C#语言中的泛型 I 知识结构: 1. 泛型概述 泛型广泛应用于容器(Collections)和对容器操作的方法中. 从 .NET Framework2.0 开始,微软提供了一个新的命名空间Syste ...
- Java中的泛型 --- Java 编程思想
前言 我一直都认为泛型是程序语言设计中一个非常基础,重要的概念,Java 中的泛型到底是怎么样的,为什么会有泛型,泛型怎么发展出来的.通透理解泛型是学好基础里面中非常重要的.于是,我对<Ja ...
- 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- java中什么泛型_【原创】java中的泛型是什么,有什么作用
泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方 ...
最新文章
- erlang mnesia数据库简单应用
- ruhr启动mysql数据库_Mysql表类型(存储引擎)的选择
- AngularJS 资源和开发教程
- DevOps和持续交付
- Android优美代码赏析:Snake游戏分析
- npm stripts 使用指南
- linux系统MSL时间如何查,Linux和Windows系统修改MSL的值
- 常用PC,移动浏览器User-Agent大全
- 危与机并存 保险业如何走好线上线下业务并举转型之路?
- Word2007 无法给尾部空格加下划线
- 致敬达叔!Python带你回顾达叔出演过的作品与合作过的演员
- 【杂货铺】中国房屋种类
- 会声会影2020软件新增功能详情
- VC++年月日时间和64位时间的使用及相互转换(附源码)
- TPshop项目步骤(一)
- 《基于物联网的车内安防系统项目需求说明书+系统概要说明+系统详细说明》
- 学生信息管理系统——实时错误‘94’
- ssm+JSP计算机毕业设计重庆工商大学公寓信息管理系统x49c1【源码、程序、数据库、部署】
- 推荐Paypal的两个数据职位(实习/社招)
- voc2012数据集下载链接
热门文章
- 衡量模块独立性的两个定性标准
- 数据库为date型,而前端要显示String型,问题解决
- 系统提示一个程序正在被另一个程序调用,如何知道是被哪个程序调用
- 智商情商哪个重要_《所谓逆商高,就是心态好》:逆商,比情商和智商更重要...
- antd 能自适应吗_一种能自适应识别母线运行方式的备自投装置应用探讨
- php中常用的运算符和表达式有哪几种,php 运算符与表达式详细介绍
- 冯诺依曼机器人_冯·诺依曼型计算机的五大组成部分是什么?
- c语言 画函数,c语言绘制函数曲线
- 深度优化LNMP之PHP
- 字节跳动被爆商业化部门大量裁员