Создание массива общих (но типизированных по объявлению) выражений - PullRequest
0 голосов
/ 13 февраля 2019

Это то, что я пытаюсь сделать:

public static Expression<Func<object, object>>[] Expressions() 
    => new Expression<Func<object, object>>[]
        {
            (Type1 t1) => t1.t1Field,
            (Type2 t2) => t2.t2Field,
            ...
            (TypeN tN) => tN.tNField
        };

Компилятору не нравится Type[i] part: Cannot convert lambda expression to delegate type 'Expression<Func<object, object>>' because the parameter types do not match the delegate parameter.

Я попытался использовать dynamic вместоobject, но это не сработало.

Я также пытался добиться чего-то подобного, но безуспешно:

public static Expression<Func<object, object>> Cast<T>(Expression<Func<T, object>> expression)

1 Ответ

0 голосов
/ 13 февраля 2019

Ваш возвращаемый тип - это массив лямбд, которые принимают объект и возвращают объект.Но вы возвращаете массив лямбд, каждый из которых принимает некоторый тип пользователя.Самый простой способ заставить это работать - добавить приведение типа:

public static Expression<Func<object, object>>[] Expressions()
  => new Expression<Func<object, object>>[]
  {
      (Object o) => ((Type1)o).t1Field,
      (Object o) => ((Type2)o).t2Field,
  };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...