powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос по Linq, lambda, Expression
10 сообщений из 10, страница 1 из 1
Вопрос по Linq, lambda, Expression
    #39593825
yabs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

есть функция, которая принимает метод определенного класса.
Ее задача достаточно тривиальна - вытащить строковое название переданного метода и класса.
Код: c#
1.
 public static string Action<T>(Expression<Func<T, object>> action) {    }


вызывается так
Код: c#
1.
Action<BaseController>(x => x.ConvertHtmlToPdf("test"));


задача заключается в том, чтобы заставить принимать функцию метод без параметров
как-то вот так
Код: c#
1.
Action<BaseController>(x => x.ConvertHtmlToPdf);


не могу допетрить, как этого добиться

заранее спасибо
...
Рейтинг: 0 / 0
Вопрос по Linq, lambda, Expression
    #39593883
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yabs, nameof()
...
Рейтинг: 0 / 0
Вопрос по Linq, lambda, Expression
    #39593887
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        public static string GetCallerName()
        {
            StackFrame frame = new StackFrame(1);
            var method = frame.GetMethod();
            var type = method.DeclaringType;
            var name = method.Name;
            return $"{type}\\{name}";
        }
...
Рейтинг: 0 / 0
Вопрос по Linq, lambda, Expression
    #39593923
yabs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesyabs, nameof()
не подходит
нужна проверка, что переданный метод существует в классе
...
Рейтинг: 0 / 0
Вопрос по Linq, lambda, Expression
    #39593925
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yabs,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
class Program
{
  public static void Main()
  {
    Console.WriteLine(Action<BaseController>(x => x.ConvertHtmlToPdf));
  }

  public static string Action<T>(Expression<Func<T, Func<string, object>>> action)
  where T : new()
  {
    return action.Compile()(new T())("test") as string ?? "null";
  }
}

class BaseController
{
  public object ConvertHtmlToPdf(string name)
  {
    return string.Concat(name, name);
  }
}


?
...
Рейтинг: 0 / 0
Вопрос по Linq, lambda, Expression
    #39593927
yabs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

это вообще из другой оперы
...
Рейтинг: 0 / 0
Вопрос по Linq, lambda, Expression
    #39593985
yabs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

спасибо, это почти то
только Func<string, object> накладывает ограничения на типы аргументов и возвраещемого типа((
...
Рейтинг: 0 / 0
Вопрос по Linq, lambda, Expression
    #39594038
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yabs,

тогда можно попробовать как-то так:
Код: 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.
class Program
{
  public static void Main()
  {
    Console.WriteLine(Action<BaseController>(x => (Func<string, object>)x.ConvertHtmlToPdf));
  }

  public static void Foo<T>(object wrapper)
  {
  }

  public static string Action<T>(Expression<Func<T, dynamic>> action)
  where T : new()
  {
    var method = ((MethodCallExpression) ((UnaryExpression) action.Body).Operand).Arguments
      .OfType<ConstantExpression>()
      .FirstOrDefault(a => a.Value is MethodInfo);
    return method == null ? "null" : ((MethodInfo) method.Value).Name;
  }
}

class BaseController
{
  public object ConvertHtmlToPdf(string name)
  {
    return string.Concat(name, name);
  }
}
...
Рейтинг: 0 / 0
Вопрос по Linq, lambda, Expression
    #39594039
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(Foo<T> там не нужен - случайно затесался)
...
Рейтинг: 0 / 0
Вопрос по Linq, lambda, Expression
    #39594763
yabs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

да, спасибо. похоже на то.
громоздко правда ((
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос по Linq, lambda, Expression
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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