C# Expression学习笔记(一、表达式与表达式树的基本结构)
一个美丽的邂逅
昨天心血来潮,想着用了很久的HangFire这个任务调度组件,却从来没有研究过其源码,所以我就想着看一下Hangfire的源码,然后当我看到Hangfire源码中 AspNetShutdownDetector(Asp.Net服务停止检测器)这个类的源码的时候,看到其实现方式中,有两个私有的方法,看起名称是用于创建或者获取某个类中的静态字段和非静态字段的,但是看其实现则是通过表达式树进行反射查找。代码如下:
private static Func<T> CreateGetStaticFieldDelegate<T>(FieldInfo fieldInfo)
{
var fieldExp = Expression.Field(null, fieldInfo);
return Expression.Lambda<Func<T>>(fieldExp).Compile();
}
private static Func<object, T> CreateGetFieldDelegate<T>(FieldInfo fieldInfo, Type type)
{