具有属性表达式“类型”参数的泛型方法不能从usage"推导出来



我希望我没有在这里崩溃-如果我很高兴删除这个问题…但是给定以下方法:

IList<T> ConvertSomething<T, TProperty>(IList<T> original, Expression<Func<T, TProperty>> valuePropertyExpression, Expression<Func<T, TProperty>> namePropertyExpression);

. .我可以这样命名它:

var data = new List<MyType>(); // would be real data of that type
var output = _factory.ConvertSomething<MyType, object>(data, x => x.Id, x => x.Name);

. .但不是这样的:

var output = _factory.ConvertSomething(data, x => x.Id, x => x.Name);

第二个版本导致编译器报错,提示"cannot be inferred from useage"错误。

我的问题是:

  1. 是当只有方法可以知道T
  2. 时,我正在做的事情。
  3. 如果没有,是否有另一种方法(我需要知道两个请求的PropertyInfo对象来做我的"转换",不希望用户必须通过字符串来做)。

这是因为IdName的类型不同。因为object与它们都兼容,所以你可以调用它来指定object。您可以像这样添加第三个泛型参数:

IList<T> ConvertSomething<T, TValue, TName>(
     IList<T> original, 
     Expression<Func<T, TValue>> valuePropertyExpression, 
     Expression<Func<T, TName>> namePropertyExpression);