使用此代码和表达式api无法获取此属性名称

RBa*_*iak 1 c# reflection expression-trees

我有以下类,我需要获取其属性名称:

public class PMLButtonData
{
    public int BackgroundColorID
    {
        get;
        set;
    }

    public string Callback
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

要获取我正在使用此功能的名称

public static string GetPropertyName<T>(Expression<Func<T, object>> lambda)
{
    MemberExpression member = lambda.Body as MemberExpression;
    PropertyInfo property = member.Member as PropertyInfo;

    return property.Name;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用以下代码获取Callback属性名称:

string name = GetPropertyName<PMLButtonData>(x => x.Callback);
Run Code Online (Sandbox Code Playgroud)

但是其他属性的相同代码不起作用:

string name = GetPropertyName<PMLButtonData>(x => x.BackgroundColorID);
Run Code Online (Sandbox Code Playgroud)

它们之间的唯一区别是数据类型,因此我将Callback更改为int,并且代码不再适用于此属性.如果它是一个整数,为什么我不能这样得到属性的名称?

Dan*_*ite 5

我猜测它的拳击比赛中int进入object第一.试试这个签名:

public static string GetPropertyName<T, T2>(Expression<Func<T, T2>> lambda)
Run Code Online (Sandbox Code Playgroud)