Expression <func <t >>是否可以与静态/实例混合成员一起使用?

时间:2019-04-09 10:13:53

标签: c# .net linq linq-expressions

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

  

非静态字段,方法或   属性“ Program.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;
    }
}

1 个答案:

答案 0 :(得分:2)

您将代码放入public 静态 void Main(string[] args)内,这意味着您没有Program实例来访问Foo 实例成员。它与表达式无关,GetMemberName会随您的写作而工作。