C # Получить имя нестатического свойства класса - PullRequest
3 голосов
/ 26 июня 2010

У меня есть вопрос, очень похожий на другой вопрос: Получить имя свойства в виде строки .

Его решение закончилось на

// Static Property 
string name = GetPropertyName(() => SomeClass.SomeProperty); 

// Instance Property 
string name = GetPropertyName(() => someObject.SomeProperty); 

Что я 'Мне нравится иметь синтаксис, похожий на статическое свойство, но для свойства экземпляра.

Причина в том, что теперь у меня есть код, который использует отражение, чтобы получить значение свойства для всех объектов в коллекции, но я должен передать его в виде жестко закодированной строки.

Пример кода:

double Sum = AmountCollection.Sum("thatfield");  

Что ж, это прекрасно работает, но если "thisfield" будет когда-либо переименовано, код больше не будет работать.Компилятор не может проверить это, поскольку это просто строка.Кроме того, Get References не будет работать по той же причине.

Итак, есть ли способ достичь цели, заключающейся в том, чтобы легко получить имя свойства (т.е. просто вызов функции) из свойства экземпляра?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 26 июня 2010

Попробуйте это:

string name = GetPropertyName(() => default(SomeClass).SomeInstanceProperty);

Вы можете получить предупреждение компилятора о «всегда вызывать исключение System.NullReferenceException», но на самом деле этого не происходит, поскольку вы не выполняете выражение, что означаетможете смело отменить это предупреждение.Если вы хотите избавиться от него, либо отключите его с помощью прагмы, либо просто переместите вызов default() в функцию, подобную этой:

public static T Dummy<T>() {
  return default(T);
}

string name = GetPropertyName(() => Dummy<SomeClass>().SomeInstanceProperty);
0 голосов
/ 21 декабря 2016

С C # 6.0 вы используете nameof:

 nameof(SomeProperty)

Это выражение разрешается во время компиляции в "SomeProperty".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...