首页 新闻 会员 周边 捐助

谁可以解释下这个代码,或者说一下 要看懂这个代码,需要什么预备知识

0
悬赏园豆:5 [已解决问题] 解决于 2016-09-29 11:30
 private Func<object, string, object> GenerateGetValue()
        {
            var type = _t;
            var instance = Expression.Parameter(typeof(object), "instance");
            var memberName = Expression.Parameter(typeof(string), "memberName");
            var nameHash = Expression.Variable(typeof(int), "nameHash");
            var calHash = Expression.Assign(nameHash, Expression.Call(memberName, typeof(object).GetMethod("GetHashCode")));
            var cases = new List<SwitchCase>();
            foreach (var propertyInfo in type.GetProperties())
            {
                var property = Expression.Property(Expression.Convert(instance, type), propertyInfo.Name);
                var propertyHash = Expression.Constant(propertyInfo.Name.GetHashCode(), typeof(int));

                cases.Add(Expression.SwitchCase(Expression.Convert(property, typeof(object)),propertyHash));
            }
            var switchEx = Expression.Switch(nameHash, Expression.Constant(null), cases.ToArray());
            var methodBody = Expression.Block(typeof(object), new[] { nameHash }, calHash, switchEx);

            return Expression.Lambda<Func<object, string, object>>(methodBody, instance, memberName).Compile();
        }

这是一段代码的核心逻辑,主要实现了 <传一个类型和一个属性名称,可以高效的获得 属性值> 这个功能。我断点看了好多遍,也把各个关键字百度搜索了下,可是还是看不懂。只知道这是利用表达式树 = =!哪个大神可以简单的讲解下,这一行一行代码到底在做什么。或者告诉我下,要读懂这代码 ,需要什么预备知识,如果大神们如果曾经看到过相关的博客,也可以给下我。 

CodeBear的主页 CodeBear | 初学一级 | 园豆:3
提问于:2016-06-04 14:00
< >
分享
最佳答案
0
收获园豆:5
hahanonym | 小虾三级 |园豆:1460 | 2016-06-05 11:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册