using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace MfGames.Nitride; /// /// Helper methods for getting the names of properties. /// public static class ExpressionHelper { public static string GetMemberName( Expression> expression) { return GetMemberName(expression.Body); } public static IEnumerable GetMemberNames( params Expression>[] expressions) { return expressions.Select(x => GetMemberName(x.Body)); } public static IEnumerable GetMemberNames( this T instance, params Expression>[] expressions) { return GetMemberNames(expressions); } private static string GetMemberName(Expression expression) { if (expression == null) { throw new ArgumentException(nameof(expression)); } if (expression is MemberExpression memberExpression) { return memberExpression.Member.Name; } if (expression is MethodCallExpression methodCallExpression) { return methodCallExpression.Method.Name; } if (expression is UnaryExpression unaryExpression) { return GetMemberName(unaryExpression); } throw new ArgumentException(nameof(expression)); } private static string GetMemberName(UnaryExpression unaryExpression) { if (unaryExpression.Operand is MethodCallExpression methodCallExpression) { return methodCallExpression.Method.Name; } return ((MemberExpression)unaryExpression.Operand).Member.Name; } }