我正在尝试编写和扩展方法,该方法采用此参数的类型并将其传递给通常类型化的方法,即
public TDestination MethodName<TSource, TDestination>(this TSource obj)
{
return DestinationClass.DestinationMethod<TSource, TDestination>(obj)
}
如何在调用方法时定义TSource时,如何假设此参数的类型作为目标方法的类型
澄清:我想创建一个帮助器方法,以便我可以直接从一个对象调用MethodName并使用一个带有两种类型的预先编写的泛型方法,所以我想将它缩短为一个目标类型,并让方法假设类型为传递给扩展方法的对象
用法示例:即AutoMapper扩展示例
原始方法致电:
var person = _db.People.Single(q=>q.Id == 5);
//use automapper directly to map object
return Mapper.Map<Person, PersonDisplay>(person);
我想将此缩短为
var person = _db.People.Single(q=>q.Id == 5);
//use extension method to map
return person.MapTo<PersonDisplay>()
想将此缩短为
答案 0 :(得分:1)
你做不到。通用参数必须全部显式或全部隐式。你不能让编译器推断出一个供应另一个。因此,您将需要不同的API。也许通过中间人,所以你有类似的东西:
obj.Foo().Bar<AnotherType>();
这是可能的。