如何将 lambda 运算符的权限转换为字符串
本文关键字:权限 转换 字符串 运算符 lambda | 更新日期: 2023-09-27 18:36:32
前言
我知道可以使用反射和表达式的组合来获取变量的名称。但是,在属性/字段链接的情况下,是否可以获取不仅仅是变量的名称?
示例函数
public void DisplayVarName<T>(Expression<Func<T>> expression){
MemberExpression memberExpression =
expression.Body as MemberExpression;
Console.WriteLine(memberExpression.Member.Name);
}
例 1
string helloWorldStr = "Hello World";
DisplayVarName(() => helloWorldStr); // Outputs "helloWorldStr"
例 2
Person person = new Person(){ Name = "Santa Clause" };
DisplayVarName(() => person.Name); // Outputs "Name"
问题
有没有办法将 lambda 运算符右侧的任何内容存储在字符串中?
示例 2 将产生"person.Name"
,而不是简单地"Name"
看起来最简单的方法是迭代MemberExpression.Expression
public static void DisplayVarName<T>(Expression<Func<T>> expression)
{
List<string> memberNames = new List<string>();
MemberExpression memberExpression =
expression.Body as MemberExpression;
do
{
memberNames.Add(memberExpression.Member.Name);
memberExpression =
memberExpression.Expression as MemberExpression;
} while (memberExpression != null);
memberNames.Reverse();
Console.WriteLine(String.Join(".", memberNames));
}
如果您只想将 lambda 的整个主体打印为字符串,则非常简单:
public void DisplayVarName<T>(Expression<Func<T>> expression){
Console.WriteLine(expression.Body);
}