【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

一步一步学LINQ-泛型

原创 2013年12月06日 10:04:34

买了一本书 LINQ从基础到项目实践。记录只为督促自己学习过程

    【摘要】C#2.0 语言在很多方面扩充了原有的C#1.0的语言,提出了泛型,匿名方法的概念,使用泛型可以定义带有一个或者多个类型参数的方法或类。泛型是LINQ技术实现的基石。

我们以取两数取小的函数为列;

int Min (int a,int b)

{
     if(a<b)
        return a;
     else

        return b;
}

这个方法使用强类型的方法定义参数a,b。如果是浮点型的就需要重新定义一个方法了。我们想在.NET机制中所有的数据类型的基类是object。

object Min(object a,object b)

{

   if(a<b)

     return a;

   else

     return b;

}

不幸的是,这段代码当接受两个int 或者float类型参数时,并不能正常工作,原因是比较操作符“<”并不是dinginess在object类型上面的操作符,需要借助于一个IComparable接口来实现比较运算,于是就要修改

IComparable Min(IComparablet a,IComparable b)

{

   if(a.CompareTo(b)<0)

     return a;

   else

     return b;

}

至此上述问题算是解决了,但是带来新的问题,每次使用这段代码,都必须进行类型之间的相互转换,如下面的方法调用代码需要将方法的返回值转换成整数类型。

int a=3,b=5;

int c=(int) Min(a,b);

频繁的类型转换会消耗计算机的资源,造成程序的执行效率下降。为了根本上解决这个问题,C#2.0提出了泛型的概念,使用泛型可以将类型转换工作推迟到程序自行时由JITTER(JITTER 是.Net的一部分,它负责将IL代码转换成机器代码,C#编译器将源编译成IL代码执行),经过JITTER编译过的机器代码将不在含有类型转换的内容。

    static T Min<T>(T a, T b) where T : IComparable<T>
        {
            if (a.CompareTo(b) < 0)
                return a;
            else
                return b;
        }



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

LINQ(Language Integrated Query)(1):简介

C# 2.0最大的改进是泛型.C# 3.0最大的改进就是Linq(语言集成查询).Linq又细分三大块:Linq to XML,Linq to ADO.NET(Linq to SQL,Linq to DataSet,Linq to Entity),Linq to Object. 关于Linq的争议 有些人对Linq to ADO.NET可能有很多异议.觉得它是对ADO.NET再封装一次,性能降低了 .而且ADO.NET用着也挺好的.干嘛那么麻烦再学个

程序员必读书单

原文地址:http://lucida.me/blog/developer-reading-list/ 关于 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键...
  • licx11
  • licx11
  • 2015-03-01 17:05
  • 1198

第17课 数据与通信之ADO.NET Data Services

<div

[老老实实学WCF] 第五篇 再探通信--ClientBase

老老实实学WCF 第五篇 再探通信--ClientBase   在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory来完成同样的...

工作经验到底是个什么东东?工作经验从哪里来?

最近网上一直比较热闹,“淋巴哥”老师拿
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)