具有属性表达式的通用方法“无法从使用中推断出类型参数”

时间:2014-08-12 07:38:39

标签: c# generics lambda

我希望我在这里没有崩溃 - 如果我是......我会乐意删除这个问题但是给出了以下方法:

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);

第二个版本导致编译器抱怨,“无法从useage推断”错误。

所以我的问题是:

    当只有方法可以了解T 时,
  1. 就是我正在做的事情
  2. 如果没有,是否有另一种方法(我需要知道两个请求的PropertyInfo对象来进行'转换',并且不希望用户必须通过字符串来执行此操作。

1 个答案:

答案 0 :(得分:1)

这是因为IdName的类型不同。由于object与它们兼容,因此您可以将其称为指定对象。您可以添加第三个通用参数,如下所示:

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

然后应该正确推断出类型。

相关问题