コード例 #1
0
        // Static - Property Getter
        public static Expression <Func <TProperty> > StaticPropertyGetter <TClass, TProperty>(string propertyName)
        {
            Contract.Requires(propertyName.SafeHasContent());

            var type = typeof(TClass);
            var propertyExpression = default(Expression);
            var propertyNameSplit  = propertyName.Split('.');

            foreach (var name in propertyNameSplit)
            {
                var propertyInfo     = TypeReflection.GetProperty(type, name, ReflectionFlags.Public | ReflectionFlags.Static | ReflectionFlags.Instance);
                var isPropertyStatic = PropertyReflection.IsStatic(propertyInfo);
                propertyExpression = Expression.Property(isPropertyStatic ? null : propertyExpression, propertyInfo);
                type = propertyInfo.PropertyType;
            }

            var lambdaExpression = Expression.Lambda <Func <TProperty> >(propertyExpression);

            return(lambdaExpression);
        }
コード例 #2
0
        // Instance - Property Getter
        public static Expression <Func <TObject, TProperty> > PropertyGetter <TObject, TProperty>(string propertyName)
        {
            Contract.Requires(propertyName.SafeHasContent());

            var type = typeof(TObject);
            var instanceExpression = Expression.Parameter(type, "x");
            var propertyExpression = (Expression)instanceExpression;
            var propertyNameSplit  = propertyName.Split('.');

            foreach (var name in propertyNameSplit)
            {
                var propertyInfo     = TypeReflection.GetProperty(type, name, ReflectionFlags.Public | ReflectionFlags.Instance | ReflectionFlags.Static);
                var isPropertyStatic = PropertyReflection.IsStatic(propertyInfo);
                propertyExpression = Expression.Property(!isPropertyStatic ? propertyExpression : null, propertyInfo);
                type = propertyInfo.PropertyType;
            }

            var lambdaExpression = Expression.Lambda <Func <TObject, TProperty> >(propertyExpression, instanceExpression);

            return(lambdaExpression);
        }