net*_*rog 16 c# lambda properties
甲字符串表示的对象实例属性的可采取用Expression<Func<T>>:
string propertyName = ((MemberExpression) property.Body).Member.Name;
Run Code Online (Sandbox Code Playgroud)
但是,如果我没有(不想创建)实例呢?在这种情况下如何获取属性名称?
解释
我需要一个对象的属性名称的字符串表示.
假设有一个实体
public class Customer
{
public int ID;
public string Name;
}
Run Code Online (Sandbox Code Playgroud)
现在我想将这个实体的键表达式传递给其他函数,因此我需要字符串"ID",但我不想像字符串那样硬编码SomeOtherFunction("ID"),而是使用表达式SomeOtherFunction(ExpressionReader.GetString(() => CustomerInstance.ID)).为此,我需要提供实体实例.
现在我想在不创建实例的情况下做同样的事情.
Pet*_*ter 15
这可以使用如下方法签名:
private static string GetPropertyName<TModel, TProperty>(Expression<Func<TModel, TProperty>> property)
{
MemberExpression memberExpression = (MemberExpression)property.Body;
return memberExpression.Member.Name;
}
Run Code Online (Sandbox Code Playgroud)
您可以在没有客户类实例的情况下调用此方法:
string propertyName = GetPropertyName((Customer c) => c.ID);
Run Code Online (Sandbox Code Playgroud)
当然,在转换MemberExpression和访问之前,您应该为正确的表达式类型添加一些检查memberExpression.Member.Name.