创建一个通用(但在声明中键入)表达式数组

时间:2019-02-13 13:09:06

标签: c# .net lambda

这是我要完成的工作:

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]部分: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 :(得分:1)

您的返回类型是一个接受对象并返回对象的lambda数组。但是您返回一个lambda数组,每个lambda都接受某种用户类型。最简单的方法是添加类型转换:

public static Expression<Func<object, object>>[] Expressions()
  => new Expression<Func<object, object>>[]
  {
      (Object o) => ((Type1)o).t1Field,
      (Object o) => ((Type2)o).t2Field,
  };