Я ищу способ получить имя свойства в виде строки, чтобы получить «строго типизированную» магическую строку. Мне нужно сделать что-то вроде MyClass.SomeProperty.GetName (), который вернет SomeProperty. Возможно ли это в C #?
Вы можете легко добиться этого с помощью выражений. См. Образец в этом блоге.
Это позволяет создать выражение с помощью лямбда-выражения и извлечь имя. Например, реализация INotifyPropertyChanged может быть переработана, чтобы сделать что-то вроде:
public int MyProperty {
get { return myProperty; }
set
{
myProperty = value;
RaisePropertyChanged( () => MyProperty );
}
}
Чтобы сопоставить свой эквивалент, используя указанный класс «Reflect», вы должны сделать что-то вроде:
Лучший ответ здесь. Я не хочу зацикливать свойства, я хочу получить имя свойства на основе фактического свойства. Использование анонимного типа с первым (единственным) свойством, являющимся тем, из которого вы хотите получить имя, - это гениально.
- personPaul; 12.06.2014
comment
@ Пол Я не гений, стоящий за этим. Во-вторых, это не очень удобно для рефакторинга. Я имею в виду, что если вы измените имя свойства, анонимный тип сохранит исходное имя. В этом случае, если вы измените SomeProperty на SomeProperty1, анонимный класс изменится на new { SomeProperty = SomeProperty1 }, который будет печатать SomeProperty вместо обновленного имени SomeProperty1. Упомяну в ответе.
- personnawfal; 12.06.2014
comment
Штопать. Я не ожидаю, что когда-нибудь изменит имя свойства, но если бы я когда-нибудь это сделал, мне бы хотелось, чтобы рефакторинг справился с этим. Спасибо, что дал мне знать.
- personPaul; 12.06.2014
comment
Это также не удастся, если MyClass имеет значение NULL во время выполнения. Подходы к экспрессии будут успешными. В подавляющем большинстве случаев это не будет проблемой, потому что вы получите исключение нулевой ссылки где-то еще, но, вероятно, стоит указать на это.
- personRakuen42; 20.03.2015
comment
@ Pedro77 вы должны сначала написать метод расширения в статическом классе.
- personnawfal; 09.06.2015
arrow_upward 2 arrow_downward
Вы можете получить список свойств объекта с помощью отражения.