使用扩展参数类型作为Generic类型参数传递

时间:2013-04-05 21:00:37

标签: c# .net generics extension-methods

我正在尝试编写和扩展方法,该方法采用此参数的类型并将其传递给通常类型化的方法,即

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

想将此缩短为

1 个答案:

答案 0 :(得分:1)

你做不到。通用参数必须全部显式或全部隐式。你不能让编译器推断出一个供应另一个。因此,您将需要不同的API。也许通过中间人,所以你有类似的东西:

obj.Foo().Bar<AnotherType>();

这是可能的。