Выражение как параметр функции для свойства и типа объекта - PullRequest
0 голосов
/ 13 июня 2018

Мне нужна функция, которая принимает в качестве параметра следующие вещи:

  • Тип объекта
  • Имя определенного свойства объекта

В настоящее время я делаю это довольно неудобно и долго:

public static void Add<TEntity, TProperty>(TEntity e, Expression<Func<TProperty>> expression)
{
     var type = typeof(TEntity);
     var propertyName = ((MemberExpression) expression.Body).Member.Name;
}

, что приводит к вызову функции, подобному этому: Add(Foo, () => Foo.Bar);

Однако с этим решением у меня есть пара проблем:

  • Это очень долго, когда у меня есть такой объект: Add(Foo.Bar.Element.Type, () => Foo.Bar.Element.Type.Name) и выглядит довольно некрасиво.
  • Не гарантируется, что propertyName является свойствомтип объекта.
    • На самом деле я ничего не делаю с e, поэтому он не используется.

Есть ли лучшее решение для этого?

1 Ответ

0 голосов
/ 13 июня 2018

Вы можете решить первую проблему, добавив параметр к лямбде:

public static void Add<TEntity, TProperty>(TEntity e, Expression<Func<TEntity, TProperty>> expression)

Add(Foo.Bar.Element.Type, x => x.Name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...