.Net Micro Framework的TinyCLR是遵循PC机上的CLR1.0版本的, 这样使得要求CLR版本为2.0以上(提供了泛型)的LINQ无法在Micro Framework之上得到支持, 不过除了LINQ之外的Lambda表达式, 扩展方法等都是可以被编译器编译为各种CLR版本都支持的, 于是我们是不是可以利用编译器和以上的特性来实现一下没有泛型的linq呢?
答案是肯定的, Marc Frei 和 Cuno Pfister 的试验证实了这种可行性, 以下是他们的测试:
Linq
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->usingSystem.Collections;
usingMicrosoft.SPOT;
namespaceSystem.Runtime.CompilerServices{
[AttributeUsageAttribute(
AttributeTargets.Assembly
|AttributeTargets.Class
|AttributeTargets.Method)]
sealedclassExtensionAttribute:Attribute{}
}
delegateboolPredicate(objecto);
sealedclassEnumerator:IEnumerator{
IEnumeratore;
Predicatep;
internalEnumerator(IEnumeratore,Predicatep){
this.e=e;
this.p=p;
}
objectIEnumerator.Current{
get{returne.Current;}
}
voidIEnumerator.Reset(){
e.Reset();
}
boolIEnumerator.MoveNext(){
varb=e.MoveNext();
while(b&&!p(e.Current)){
b=e.MoveNext();
}
returnb;
}
}
sealedclassFilter:IEnumerable{
IEnumerablee;
Predicatep;
internalFilter(IEnumerablee,Predicatep){
this.e=e;
this.p=p;
}
IEnumeratorIEnumerable.GetEnumerator(){
returnnewEnumerator(e.GetEnumerator(),p);
}
}
staticclassProgram{
staticintCount(thisIEnumerablee){
varn=0;
foreach(varoine){
n++;
}
returnn;
}
staticIEnumerableWhere(thisIEnumerablee,Predicatep){
returnnewFilter(e,p);
}
staticvoidMain(){
vara=newint[]{1,2,3,4,6,8,9,9,9};
varn=a.Where(v=>(int)v%2==0).Count();
varm=(fromvinawhere(int)v%2==0selectv).Count();
Debug.Print(n+""+m);
}
}
你不妨在你的VS2008中新建一个MFConsoleApp测试一下
Enjoy!
黄季冬
分享到:
相关推荐
详细的Linq用法介绍 查询顾客的联系人和电话。 var q = from e in db.Employees select new { Name = e.FirstName + " " + e.LastName, Phone = e.HomePhone };
linq2db.EntityFrameworkCore linq2db.EntityFrameworkCore是LINQ To DB与现有EntityFrameworkCore项目的集成。 它受到EF.Core存储库中启发。 建造状态 提要 NuGet 蔚蓝神器 ( ) 独特的功能 快速快速加载(在大...
LINQ in NET Framework 4 是学习LINQ的好资料
利用ADO.net entity framework+Linq实现的学习源代码---利用ADO.net entity framework+Linq实现的学习源代码
介绍生成 LINQ 项目所需的 .NET Framework 版本、引用和命名空间。 5.对 LINQ 的 Visual Studio IDE 和工具支持 描述对象关系设计器、对查询的调试器支持以及其他与 LINQ 相关的 IDE 功能。 6.LINQ 常规编程指南 ...
LINQBridge让你的LINQ代码可在.NET 2.0下运行
使用 LINQ To SQL 和Entity Framework实现灵活的数据访问使用 LINQ To SQL 和Entity Framework实现灵活的数据访问
Entity Framework技术系列之7:LINQ to Entities.pdf
使用Linq访问数据库技术电子书,有视屏但太大不能上传。
LINQ to SQL和Entity Framework对比与关联LINQ to SQL和Entity Framework对比与关联
亲测好用,利用c# 的LinqXML技术 使用LINQ技术对XML文件进行读取
在工作流中使用linq查询
linq中文教程 linq中文使用说明 linq详解
.net2.0使用Linq,lambada表达式,直接引用使用即可,从system.core中抽取的扩展。
第二、三、四部分详细介绍了LINQ的三大主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ功能的方法以及LINQ to DataSet。 本书适合于使用C#和VB.NET...
亲测好用,利用c# 的LinqXML技术 使用LINQ技术修改XML文件中
要实现Ext Grid的远程排序其实很简单,只要修改查询语句的排序关键字就可以了,但是,如果你的项目是使用Linq进行开发的,会发现动态修改排序关键字并不是那么容易的事,解决办法就是使用LINQ Dynamic Query Library...
Language-Integrated Query (LINQ) 定义了一组可以在 .NET Framework 3.0 编程语言中使用的通用标准查询运算符。 使用这些标准查询运算符可以投影、筛选和遍历内存中的集合或数据库中的表。 请注意,LINQ 查询使用...
Programming Microsoft LINQ in Microsoft .NET Framework 4.pdf
介绍生成 LINQ 项目所需的 .NET Framework 版本、引用和命名空间。 5.对 LINQ 的 Visual Studio IDE 和工具支持 描述对象关系设计器、对查询的调试器支持以及其他与 LINQ 相关的 IDE 功能。 6.LINQ 常规编程指南 ...