46 lines
No EOL
1.5 KiB
C#
46 lines
No EOL
1.5 KiB
C#
using System;
|
|
using System.Linq.Expressions;
|
|
|
|
namespace JD.MessageService
|
|
{
|
|
public static class MemberNameResolver
|
|
{
|
|
|
|
public static string ResolveMemberName<T>(Expression<Func<T, object>> expression)
|
|
{
|
|
return ResolveMemberName(expression.Body);
|
|
}
|
|
|
|
private static string ResolveMemberName(Expression expression)
|
|
{
|
|
switch (expression.NodeType)
|
|
{
|
|
case ExpressionType.MemberAccess:
|
|
var memberExpression = (MemberExpression)expression;
|
|
var supername = ResolveMemberName(memberExpression.Expression);
|
|
|
|
if (string.IsNullOrEmpty(supername))
|
|
{
|
|
return memberExpression.Member.Name;
|
|
}
|
|
|
|
return string.Concat(supername, '.', memberExpression.Member.Name);
|
|
|
|
case ExpressionType.Call:
|
|
var callExpression = (MethodCallExpression)expression;
|
|
return callExpression.Method.Name;
|
|
|
|
case ExpressionType.Convert:
|
|
var unaryExpression = (UnaryExpression)expression;
|
|
return ResolveMemberName(unaryExpression.Operand);
|
|
|
|
case ExpressionType.Parameter:
|
|
return string.Empty;
|
|
|
|
default:
|
|
throw new ArgumentException("The expression is not a member access or method call expression");
|
|
}
|
|
}
|
|
|
|
}
|
|
} |