powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C#: Как получить имя поля через параметр метода?
3 сообщений из 3, страница 1 из 1
C#: Как получить имя поля через параметр метода?
    #38558231
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть некий мой класс с полем
Код: c#
1.
2.
3.
4.
public class MyClass
{
  public DateTime MyField;
}


Есть некий класс-хелпер, которому я отдаю значение поля для обработки
Код: c#
1.
2.
3.
4.
5.
6.
public static class MyHelpersSet
{
  public static void MyHelper(DateTime myParameter) {....}
}
...
MyHelper(MyClassInstance.MyField)


Но я хочу, чтобы MyHelper мог получить не только экземпляр DateTime, хранящийся в MyField, но и имя поля, то есть "MyField" (а в лучшем случае и атрибуты поля MyField)

Знаю, что функции фреймворка это умеют, при этом передача параметра идет через делегат и лямбду примерно так:
Код: c#
1.
MyHelper<MyClass> (x => x.MyField)


Но никак не могу понять, как хелпер получает имя поля, ведь по идее анонимный метод в виде лямбды должен скрывать реализацию, однако, факт - получает. Курил рефлексию, но ответа не нашел или не то курю? Подскажите, куда курить, как это реализовать?
...
Рейтинг: 0 / 0
C#: Как получить имя поля через параметр метода?
    #38558283
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начинать вот отсюда:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
using System;
using System.ComponentModel;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;

namespace Introspection
{
    class Example
    {
        [Description("Description for Value")]
        public int Value;

        [Description("Description for OtherValue")]
        public int OtherValue { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var example = new Example { Value = 1, OtherValue = 2};
            
            DisplayDescription(example, e => e.Value);
            DisplayDescription(example, e => e.OtherValue);
        }

        static void DisplayDescription<T, TResult>(T source, Expression<Func<T, TResult>> f)
        {
            var member = f.Body as MemberExpression;
            if(member != null)
            {
                var name = member.Member.Name;
                var attributes = member.Member.GetCustomAttributes().OfType<DescriptionAttribute>().ToList();

                foreach(var attribute in attributes)
                    Console.WriteLine("{0}: {1}", name, attribute.Description);
            } // if
        }
    }
}
...
Рейтинг: 0 / 0
C#: Как получить имя поля через параметр метода?
    #38558332
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч,

Благодарю! То, что нужно.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C#: Как получить имя поля через параметр метода?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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