zoukankan      html  css  js  c++  java
  • PropertyAccess类 Linq.Expressions 实现

    public class PropertyAccess
    {
    public const BindingFlags PropertyBinding = BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty
    //| BindingFlags.DeclaredOnly
    ;

    public readonly Func<object, object> GetValue;
    public readonly Action<object, object> SetValue;

    protected PropertyAccess(string name, bool nullable, PropertyInfo property)
    {
    // target: (object)((({TargetType})instance).{Property})
    // preparing parameter, object type
    ParameterExpression instance = Expression.Parameter(typeof(object), "instance");
    // ({TargetType})instance
    UnaryExpression instanceCast = Expression.Convert(instance, property.ReflectedType);
    if (property.CanRead)
    {
    // (({TargetType})instance).{Property}
    MemberExpression propertyAccess = Expression.Property(instanceCast, property);
    // (object)((({TargetType})instance).{Property})
    UnaryExpression castPropertyValue = Expression.Convert(propertyAccess, typeof(object));
    // Lambda expression
    GetValue = Expression.Lambda<Func<object, object>>(castPropertyValue, instance).Compile();
    }
    if (property.CanWrite)
    {
    ParameterExpression propertyValue
    = Expression.Parameter(typeof(object), "value");
    UnaryExpression propertyValueCast
    = Expression.Convert(propertyValue, property.PropertyType);
    MethodCallExpression callPropertyValue
    = Expression.Call(instanceCast, property.GetSetMethod(), propertyValueCast);
    SetValue
    = Expression.Lambda<Action<object, object>>(callPropertyValue, instance, propertyValue).Compile();
    }
    }

    public object ChangeType(object value)
    {
    return Convert.ChangeType(value, Nullable.GetUnderlyingType(base.EntityProperty.PropertyType) ?? base.EntityProperty.PropertyType);
    }
    }
  • 相关阅读:
    lucene入门
    ssm框架整合
    springmvc异常处理器和拦截器
    软件测试的策略是什么?
    软件质量保证体系是什么 国家标准中与质量保证管理相关的几个标准是什么?他们的编号和全称是什么?
    • β测试
    • α测试
    • 白盒测试
    黑盒测试
    • 数据库的兼容性
  • 原文地址:https://www.cnblogs.com/Googler/p/2000145.html
Copyright © 2011-2022 走看看