表达式<Func> 是否<T>适用于混合静态/实例成员?



我正在使用GetMemberName<T>(Expression<Func<T>> member)来检索成员名称。不使用 Foo 属性的 static 修饰符时,不能将成员与此方法一起使用:

非静态字段、方法或 属性 '程序.Foo'

由于我对 LINQ 表达式的理解程度不是那么深,我想问一下:

问题:除了nameof(Foo)之外,是否有其他方法可以以"等效">方式访问会员?目标是获取属性元数据(如名称(,而不是从实例访问其值。

public class Program
{
    public /*static*/ int Foo { get; set; }
    public static void Main(string[] args)
    {
        Console.WriteLine(GetMemberName(() => Foo));
    }
    public static string GetMemberName<T>(Expression<Func<T>> member)
    {
        return (member.Body as MemberExpression)?.Member.Name;
    }
}

您将代码放在静态void Main(string[] args) public,这意味着您没有Program实例来访问Foo实例成员。它与表达式无关,无论如何GetMemberName都会像您编写的那样工作。

最新更新