1

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

public TDestination MethodName<TSource, TDestination>(this TSource obj)
{
      return DestinationClass.DestinationMethod<TSource, TDestination>(obj)
}

我怎么能假设 this 参数的类型作为目标方法的类型在调用方法时定义 TSource 是可能的

澄清:我想创建一个辅助方法,以便我可以直接从对象调用 MethodName 并使用具有 2 种类型的预先编写的泛型方法,因此我想将其缩短为单个目标类型,并让该方法假定对象的类型为传递给扩展方法

使用示例:即 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>()  

想把它缩短到

4

1 回答 1

1

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

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

这是可能的。

于 2013-04-05T21:05:55.453 回答