一步一步学LINQ-泛型

1255人阅读 评论(0) 收藏 举报
分类:

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2386187次
    • 积分:35071
    • 等级:
    • 排名:第141名
    • 原创:897篇
    • 转载:491篇
    • 译文:6篇
    • 评论:272条
    联系方式
    • ERP群:68148773
    • C#群: 254167627
    • SQL群:446802573
    • 会计群:426046886
    • 安卓群:604859607
    • ext群: 556270614
    • Tea群: 126748158
    • 德仔工作室
    • 德仔淘宝店
    鼎捷易飞精英群
    博客专栏
    最新评论
    文章存档