我希望我没有在这里崩溃-如果我很高兴删除这个问题…但是给定以下方法:
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"错误。
我的问题是:
- 是当只有方法可以知道
T
时,我正在做的事情。 - 如果没有,是否有另一种方法(我需要知道两个请求的
PropertyInfo
对象来做我的"转换",不希望用户必须通过字符串来做)。
这是因为Id
和Name
的类型不同。因为object与它们都兼容,所以你可以调用它来指定object。您可以像这样添加第三个泛型参数:
IList<T> ConvertSomething<T, TValue, TName>(
IList<T> original,
Expression<Func<T, TValue>> valuePropertyExpression,
Expression<Func<T, TName>> namePropertyExpression);