是否可以在不创建对象实例的情况下获取对象属性名称字符串?

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.