JD2022-TU1/main/tools/framework/JD.MessageService/MemberNameResolver.cs

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");
}
}
}
}