[Linq]泛型

买了一本书 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;
        }

 

 

 

 

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厦门德仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值