Language: C#
Name, Member and Method classes
/// <summary> /// Represents static and extension methods to retrieve the name /// of a member or argument from lamba expressions. /// </summary> public static class Name { /// <summary> /// Gets the name of a member or argument from a lamba expression. /// </summary> /// <param name="expression">The expression.</param> /// <returns>The name of the item found in the expression - or - null if the expression is too complicated.</returns> public static string Of(Expression<Action> expression) { return expression.GetName(); } /// <summary> /// Gets the name of a member or argument from a lamba expression. /// </summary> /// <param name="expression">The expression.</param> /// <returns>The name of the item found in the expression - or - null if the expression is too complicated.</returns> public static string Of(Expression<Func<object>> expression) { return expression.GetName(); } /// <summary> /// Gets the name of a member or argument from a lamba expression. /// </summary> /// <param name="expression">The expression.</param> /// <typeparam name="T">Not used.</typeparam> /// <returns>The name of the item found in the expression - or - null if the expression is too complicated.</returns> public static string Of<T>(Expression<Func<T, object>> expression) { return expression.GetName(); } /// <summary> /// Gets the name of a member or argument from a lamba expression. /// </summary> /// <param name="expression">The expression.</param> /// <returns>The name of the item found in the expression - or - null if the expression is too complicated.</returns> public static string GetName(this LambdaExpression expression) { if (expression == null) return null; return Search(expression.Body); } private static string Search(Expression expression) { // Tail call. while (expression != null) { var parameterExpression = expression as ParameterExpression; if (parameterExpression != null) { return parameterExpression.Name; } var memberExpression = expression as MemberExpression; if (memberExpression != null) { return memberExpression.Member.Name; } var methodCallExpression = expression as MethodCallExpression; if (methodCallExpression != null) { return methodCallExpression.Method.Name; } var unaryExpression = expression as UnaryExpression; if (unaryExpression != null) { expression = unaryExpression.Operand; } } return null; } } /// <summary> /// Represents static and extension methods to retrieve /// a method from lamba expressions. /// </summary> public static class Method { /// <summary> /// Gets the method from a lamba expression. /// </summary> /// <param name="expression">The expression.</param> /// <returns>The item found in the expression - or - null if the expression is too complicated.</returns> public static MethodInfo Of(Expression<Action> expression) { return expression.AsMethodInfo(); } /// <summary> /// Gets the method from a lamba expression. /// </summary> /// <param name="expression">The expression.</param> /// <returns>The item found in the expression - or - null if the expression is too complicated.</returns> public static MethodInfo Of(Expression<Func<object>> expression) { return expression.AsMethodInfo(); } /// <summary> /// Gets the method from a lamba expression. /// </summary> /// <param name="expression">The expression.</param> /// <typeparam name="T">Not used.</typeparam> /// <returns>The item found in the expression - or - null if the expression is too complicated.</returns> public static MethodInfo Of<T>(Expression<Func<T, object>> expression) { return expression.AsMethodInfo(); } /// <summary> /// Gets the method from a lamba expression. /// </summary> /// <param name="expression">The expression.</param> /// <returns>The item found in the expression - or - null if the expression is too complicated.</returns> public static MethodInfo AsMethodInfo(this LambdaExpression expression) { return expression.AsMemberInfo() as MethodInfo; } } /// <summary> /// Represents static and extension methods to retrieve /// a member from lamba expressions. /// </summary> public static class Member { /// <summary> /// Gets the member from a lamba expression. /// </summary> /// <param name="expression">The expression.</param> /// <returns>The item found in the expression - or - null if the expression is too complicated.</returns> public static MemberInfo Of(Expression<Action> expression) { return expression.AsMemberInfo(); } /// <summary> /// Gets the member from a lamba expression. /// </summary> /// <param name="expression">The expression.</param> /// <returns>The item found in the expression - or - null if the expression is too complicated.</returns> public static MemberInfo Of(Expression<Func<object>> expression) { return expression.AsMemberInfo(); } /// <summary> /// Gets the member from a lamba expression. /// </summary> /// <param name="expression">The expression.</param> /// <typeparam name="T">Not used.</typeparam> /// <returns>The item found in the expression - or - null if the expression is too complicated.</returns> public static MemberInfo Of<T>(Expression<Func<T, object>> expression) { return expression.AsMemberInfo(); } /// <summary> /// Gets the member from a lamba expression. /// </summary> /// <param name="expression">The expression.</param> /// <returns>The item found in the expression - or - null if the expression is too complicated.</returns> public static MemberInfo AsMemberInfo(this LambdaExpression expression) { return Search(expression.Body); } private static MemberInfo Search(Expression expression) { // Tail call. while (expression != null) { var methodCallExpression = expression as MethodCallExpression; if (methodCallExpression != null) { return methodCallExpression.Method; } var memberExpression = expression as MemberExpression; if (memberExpression != null) { return memberExpression.Member; } var unaryExpression = expression as UnaryExpression; if (unaryExpression != null) { expression = unaryExpression.Operand; } } return null; } }
Tags:
Description:
Implementation in reply to http://codepaste.net/tfwmsu
Report Abuse
Subscribe
Discuss
What's new
What is it
New Snippet
Recent Snippets
My Snippets
Web Code
Search

