关于IEnumerable和IQueryable的区别,这事还要从泛型委托Func<T>说起。来看一个简单的泛型委托例子: class Program { static void Main(string[] args) { Func& ...
关于IEnumerable和IQueryable的区别,这事还要从泛型委托Func<T>说起。来看一个简单的泛型委托例子:
class Program
{
static void Main(get='_blank'>string[] args)
{
Func<int, bool> f = i => i > 5;
Console.WriteLine(f(3));
Console.WriteLine(f(10));
Console.ReadKey();
}
}
Func<T>是"语法糖",实际上,编译器在内部会生成一个临时方法,再执行该方法。等同于如下:
class Program
{
static void Main(string[] args)
{
Func<int, bool> f = DoSth;
Console.WriteLine(f(3));
Console.ReadKey();
}
static bool DoSth(int i)
{
return i > 5;
}
}
以上,.NET内部运作的路径是:编写C#代码→编译器编译成中间语言IL→运行时JIT编译成本地语言执行
■ 使用表达式树 Expression Tree
可是,有时候我们希望在运行时执行代码,该怎么办呢?
.NET为我们提供了Expression Tree,允许我们在运行时执行代码。
比如以上Func<int, bool> f = i => i > 5;这个表达式,Expression Tree这样理解这个表达式:
○ f是Expression<Func<int, bool>>类型,级Expression<TDelegate>类型
原标题:IEnumerable和IQueryable的区别以及背后的ExpressionTree表达式树
关键词:ie
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。