Revision: 39868
Updated Code
at January 22, 2011 00:04 by nivlam
Updated Code
public static void RenderProperty(Person person, Expression<Func<Person, object>> expression) { Func<Person, object> function = expression.Compile(); object o = function(person); var memberExpression = GetMemberExpression(expression); var propertyType = GetTypeFromMemberExpression(memberExpression); var declaringType = memberExpression == null ? null : memberExpression.Expression.Type; var inferredName = memberExpression == null ? null : memberExpression.Member.Name; } public static MemberExpression GetMemberExpression(LambdaExpression expression) { return RemoveUnary(expression.Body) as MemberExpression; } private static Expression RemoveUnary(Expression body) { var unary = body as UnaryExpression; if (unary != null) return unary.Operand; return body; } private static Type GetTypeFromMemberExpression(MemberExpression memberExpression) { if (memberExpression == null) return null; var dataType = GetTypeFromMemberInfo(memberExpression.Member, (PropertyInfo p) => p.PropertyType); if (dataType == null) dataType = GetTypeFromMemberInfo(memberExpression.Member, (MethodInfo m) => m.ReturnType); if (dataType == null) dataType = GetTypeFromMemberInfo(memberExpression.Member, (FieldInfo f) => f.FieldType); return dataType; } private static Type GetTypeFromMemberInfo<TMember>(MemberInfo member, Func<TMember, Type> func) where TMember : MemberInfo { if (member is TMember) return func((TMember) member); return null; }
Revision: 39867
Updated Code
at January 22, 2011 00:01 by nivlam
Updated Code
public static void RenderProperty(Person person, Expression<Func<Person, object>> expression) { Func<Person, object> function = expression.Compile(); object o = function(person); var memberExpression = GetMemberExpression(expression); var propertyType = GetTypeFromMemberExpression(memberExpression); var declaringType = memberExpression == null ? null : memberExpression.Expression.Type; var inferredName = memberExpression == null ? null : memberExpression.Member.Name; } public static MemberExpression GetMemberExpression(LambdaExpression expression) { return RemoveUnary(expression.Body) as MemberExpression; } private static Expression RemoveUnary(Expression body) { var unary = body as UnaryExpression; if (unary != null) { return unary.Operand; } return body; } private static Type GetTypeFromMemberExpression(MemberExpression memberExpression) { if (memberExpression == null) return null; var dataType = GetTypeFromMemberInfo(memberExpression.Member, (PropertyInfo p) => p.PropertyType); if (dataType == null) dataType = GetTypeFromMemberInfo(memberExpression.Member, (MethodInfo m) => m.ReturnType); if (dataType == null) dataType = GetTypeFromMemberInfo(memberExpression.Member, (FieldInfo f) => f.FieldType); return dataType; } private static Type GetTypeFromMemberInfo<TMember>(MemberInfo member, Func<TMember, Type> func) where TMember : MemberInfo { if (member is TMember) return func((TMember) member); return null; }
Revision: 39866
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 22, 2011 00:01 by nivlam
Initial Code
public static void RenderProperty(Person person, Expression<Func<Person, object>> expression) { Func<Person, object> function = expression.Compile(); object o = function(person); var memberExpression = GetMemberExpression(expression); var propertyType = GetTypeFromMemberExpression(memberExpression); var declaringType = memberExpression == null ? null : memberExpression.Expression.Type; var inferredName = memberExpression == null ? null : memberExpression.Member.Name; } public static MemberExpression GetMemberExpression(LambdaExpression expression) { return RemoveUnary(expression.Body) as MemberExpression; } private static Expression RemoveUnary(Expression body) { var unary = body as UnaryExpression; if (unary != null) { return unary.Operand; } return body; } private static Type GetTypeFromMemberExpression(MemberExpression memberExpression) { if (memberExpression == null) return null; var dataType = GetTypeFromMemberInfo(memberExpression.Member, (PropertyInfo p) => p.PropertyType); if (dataType == null) dataType = GetTypeFromMemberInfo(memberExpression.Member, (MethodInfo m) => m.ReturnType); if (dataType == null) dataType = GetTypeFromMemberInfo(memberExpression.Member, (FieldInfo f) => f.FieldType); return dataType; } private static Type GetTypeFromMemberInfo<TMember>(MemberInfo member, Func<TMember, Type> func) where TMember : MemberInfo { if (member is TMember) return func((TMember) member); return null; }
Initial URL
Initial Description
Initial Title
Expression as parameter
Initial Tags
Initial Language
C#