Code-Function:动态构造赋值委托

ylbtech-Code-Function:动态构造赋值委托
1.返回顶部
1、
using System;
using System.Linq.Expressions;
using System.Reflection;

namespace Sp.Common
{
    public class FunctionHelper
    {
        /// <summary>
        /// 动态构造赋值委托
        /// </summary>
        /// <typeparam name="TProperty">属性类型</typeparam>
        /// <param name="propertyInfo">属性元数据</param>
        /// <returns>强类型委托</returns>
        public static Action<object, TProperty> BuildSetPropertyAction<TProperty>(PropertyInfo propertyInfo)
        {
            var instanceParam = Expression.Parameter(typeof(object), "instance");
            var valueParam = Expression.Parameter(typeof(TProperty), "value");
            //((T)instance)
            var castExpression = Expression.Convert(instanceParam, propertyInfo.ReflectedType);
            //((T)instance).Property
            var propertyProperty = Expression.Property(castExpression, propertyInfo);
            //((T)instance).Property = value
            var assignExpression = Expression.Assign(propertyProperty, valueParam);
            var lambdaExpression = Expression.Lambda<Action<object, TProperty>>(assignExpression, instanceParam, valueParam);
            return lambdaExpression.Compile();
        }

    }
}
2、
2.返回顶部
 
3.返回顶部
 
4.返回顶部
 
5.返回顶部
 
 
6.返回顶部
 
warn 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/storebook/p/12685053.html