powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Насчёт получения имени члена класса в виде строки
6 сообщений из 6, страница 1 из 1
Насчёт получения имени члена класса в виде строки
    #38135113
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот например можно так получить имя члена класса в виде строки:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
/// <summary>
/// An extentension method on an actual object to get its member name.
/// </summary>
/// <typeparam name="T">Type of the actual object whose member name will be obtained.</typeparam>
/// <typeparam name="TResult">Type of the member of the object whose member name will be obtained.</typeparam>
/// <param name="obj">Object whose member name will be obtained.</param>
/// <param name="expression">Lambda expression of member access.</param>
/// <returns></returns>
public static string MemberName<T, TResult>(this T obj, Expression<Func<T, TResult>> expression)
{
	var node = expression.Body as MemberExpression;
	return node.Member.Name;
}




И использовать это примерно так


Код: c#
1.
_commonSettings.MemberName<Models.Settings.Common, double>(o => o.ExceedThreshold)



Вопрос, откуда лямбда-выражение знает имя члена в виде строки - node.Member.Name - и почему, чтобы получить имя члена в виде строки, я должен писать целую функцию, вместо того, чтобы вызвать уже готовый метод или просто прочитать значение свойства, как тут написано? Ведь выражение уже как-то знает сразу имя члена в виде строки - почему я не могу иметь такой же прямой доступ и именам членов в виде строки?
...
Рейтинг: 0 / 0
Насчёт получения имени члена класса в виде строки
    #38135119
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё вопрос - как получали строковое имя члена класса до появления лямбда-выражений, т. е. до версии 3 фреймворка?
...
Рейтинг: 0 / 0
Насчёт получения имени члена класса в виде строки
    #38135145
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
System.Reflection?
...
Рейтинг: 0 / 0
Насчёт получения имени члена класса в виде строки
    #38135158
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

рефлексия требует ввода жёсткозакодированного имени свойства (проблемы с рефакторингом и костыли для их устранения):

Код: c#
1.
var propertyInfo = Type.GetProperty("PropertyName");



а подход с лямбдами не требует хардкодинга.
...
Рейтинг: 0 / 0
Насчёт получения имени члена класса в виде строки
    #38135315
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, внутри методов создания экземпляра класса MemberExpression используется System.Reflection, вот и вся магия.
...
Рейтинг: 0 / 0
Насчёт получения имени члена класса в виде строки
    #38135322
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.: если код в начале топика взят из статьи: Getting Information About Objects, Types, and Members with Expression Trees , - то там в первом параграфе есть ссылка на основы Expression Tree.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Насчёт получения имени члена класса в виде строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]