我希望我在这里没有崩溃 - 如果我是......我会乐意删除这个问题但是给出了以下方法:
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
时,PropertyInfo
对象来进行'转换',并且不希望用户必须通过字符串来执行此操作。答案 0 :(得分:1)
这是因为Id
和Name
的类型不同。由于object与它们兼容,因此您可以将其称为指定对象。您可以添加第三个通用参数,如下所示:
IList<T> ConvertSomething<T, TValue, TName>(
IList<T> original,
Expression<Func<T, TValue>> valuePropertyExpression,
Expression<Func<T, TName>> namePropertyExpression);
然后应该正确推断出类型。