我正在使用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;
}
}
答案 0 :(得分:2)
您将代码放入public
静态 void Main(string[] args)
内,这意味着您没有Program
实例来访问Foo
实例成员。它与表达式无关,GetMemberName
会随您的写作而工作。