惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
Y
Y Combinator Blog
Recorded Future
Recorded Future
博客园 - Franky
I
InfoQ
T
The Blog of Author Tim Ferriss
Recent Announcements
Recent Announcements
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
T
Tailwind CSS Blog
Cyberwarzone
Cyberwarzone
The Register - Security
The Register - Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
雷峰网
雷峰网
P
Palo Alto Networks Blog
G
GRAHAM CLULEY
Cloudbric
Cloudbric
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
F
Full Disclosure
Google DeepMind News
Google DeepMind News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
Check Point Blog
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
T
Threat Research - Cisco Blogs
U
Unit 42
N
Netflix TechBlog - Medium
The Cloudflare Blog
Spread Privacy
Spread Privacy
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队
T
Troy Hunt's Blog
Engineering at Meta
Engineering at Meta
H
Heimdal Security Blog
TaoSecurity Blog
TaoSecurity Blog
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tenable Blog
B
Blog
S
Securelist
H
Hacker News: Front Page
Google Online Security Blog
Google Online Security Blog
G
Google Developers Blog

博客园 - greater

Matlab 7.0不断重启问题解决方法 安装Matlab过程中遇到拒绝访问怎么办? NUnit图解(一) [翻译]Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition 第二十四章 LINQ API编程(三) [翻译]Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition 第二十四章 LINQ API编程(二) [翻译]Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition 第二十四章 LINQ API编程(一) 迷人舞步 难译的英文单词 Linq 之Expression Tree再思考 VS2008代码段快捷方式小记 Linq To SQL分页失败后引发的思考 Linq之查询非泛型集合 函数式编程的浅议 Linq操作符之筛选特定位置的元素 Linq与斐波那契数列共舞 Linq To Object实例之过滤字符集 Linq之C#3.0语言扩展 Linq to DataSet 之Access查询 从101 LINQ Samples开始
Linq的那些事——从Linq扩展方法回顾C#语言基础
greater · 2008-06-10 · via 博客园 - greater

林奇,某市A大学计算机系大三的学生,性格孤僻,除了玩电脑打篮球以外没有其他爱好,习惯一个人呆在宿舍上网,学习成绩一般。李秋,林奇的同学兼女友,性格开朗,喜欢接触新事物,特别热衷于新技术的学习和应用而且英语特别的优秀。

话说自微软发布了Linq以后,李秋就一直潜心于该技术的学习和应用每天除了上必修课以外就没有出过宿舍,两人也有近3个月没有约会,平常的沟通主要通过网络。一天林奇实在是憋不住了于是在qq上...

林:你最近还在研究Linq吗?才出来不久,中文版的资料都还没翻译过来干吗那么急?
李:你不知道,Linq太伟大了。
林:有多伟大啊!难不成他会到饭堂给你打饭不成?
李:你听俺说吧!Linq就是语言级集成查询(Language INtegrated Query),通过它我们可以查询多种形式的数据比如有SQL,Dataset和XML等等。
林:好像很牛哦!俺就不信它那么就一点缺点都没有!
李:当然啦!任何事物都会有弱点的Linq也不能例外,举个例子说把!在国外就有人发现了Linq其中一个操作符号Sum会出现问题。
林:啥问题啊?
李:由于它的作用主要是进行算术和的运算而且返回int32类型的值,所以当计算大量数据的时候很容易出现缓冲溢出的问题。
林:你从那里知道的?
李:一个Troy Magennis的外国人发现的,你到这里看看http://aspiring-technology.com/blogs/troym/archive/2006/10/06/24.aspx

十分钟以后......

林:惨了!他重载的四个方法怎么都有看不懂的呢?
李:所以平常才叫你把C#语法学好啊!现在都出3.5版本了!你说出来看看!
林贴了第一个代码:

checked 
{
    
foreach (int v in source) sum += v;
}

林:这个checked啥意思啊!
李:它是用来进行溢出检查的,如果发生溢出就抛出异常。
林贴了第二个代码:

public static long? LongSum(this IEnumerable<int?> source)

林:好端端的干吗在long后加个?好又在IEnumerable前加个this关键字
李:其实这里long?是可空类型,也就是说返回的值可以为null。this在这里是Linq的新特性,即扩展方法。

林贴了第三个代码:

 public static long LongSum<T>(this IEnumerable<T> source, Func<T, int> selector)

林:这里LongSum<T>啥意思?
李:泛型啊!你肯定上次逃课了,老师在课上说得很清楚。其实就是一个泛型方法,只是C#编译器会在调用该方法的参数类型后辨别该方法的类型,所以不需要把泛型类赋予该方法。也就实现了泛型方法和普通方法一样调用。
林:这个函数的参数为什么这么写?
李:从它的签名来看,由于参数前带有this关键字,应该是一个扩展函数。第一个参数标示该参数是所有实现了泛型集合类。Func<T,int>其实就是一个泛型委托,它定义的是封装一个具有一个参数并返回int参数指定的类型值的方法。

这时候的林奇才恍然大悟,慢慢的他才明白了老师课堂上提到的一个非常抽象的概念泛型。泛型除了有类以外还有方法、集合和委托。他心里面觉得不好意思,准确的应该是很没面子,于是他下定决心要把Linq这项技术掌握好!别在女友面前丢人!