Ли выражениеработать со смешанными статическими / экземплярами? - PullRequest
2 голосов
/ 09 апреля 2019

Я использую GetMemberName<T>(Expression<Func<T>> member) для получения имен членов. Если для свойства Foo не используется модификатор static, элемент нельзя использовать с этим методом:

Ссылка на объект требуется для нестатического поля, метода или свойство '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 Ответ

2 голосов
/ 09 апреля 2019

Вы помещаете код внутри public статического void Main(string[] args), что означает, что у вас нет экземпляра Program для доступа к члену Foo .Это не имеет ничего общего с выражениями, GetMemberName будет работать так, как вы написали, независимо от того.

...