Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用扩展参数的类型作为泛型类型参数传递_C#_.net_Generics_Extension Methods - Fatal编程技术网

C# 使用扩展参数的类型作为泛型类型参数传递

C# 使用扩展参数的类型作为泛型类型参数传递,c#,.net,generics,extension-methods,C#,.net,Generics,Extension Methods,我正在尝试编写一个扩展方法,该方法采用this参数的类型,并将其传递给一个泛型方法 public TDestination MethodName<TSource, TDestination>(this TSource obj) { return DestinationClass.DestinationMethod<TSource, TDestination>(obj) } public TDestination方法名(此TSource对象) { 返回Dest

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

public TDestination MethodName<TSource, TDestination>(this TSource obj)
{
      return DestinationClass.DestinationMethod<TSource, TDestination>(obj)
}
public TDestination方法名(此TSource对象)
{
返回DestinationClass.DestinationMethod(obj)
}
我如何假设该参数的类型为目标方法的类型?调用该方法时,通过定义TSource,这是可能的

澄清:我想创建一个helper方法,这样我就可以直接从一个对象调用MethodName,并使用一个带有2种类型的预写泛型方法,所以我想将其缩短为一个目标类型,并让该方法假设传递给扩展方法的对象的类型

用法示例:ie自动映射扩展示例

原始方法调用:

  var person = _db.People.Single(q=>q.Id == 5);
  //use automapper directly to map object 
  return Mapper.Map<Person, PersonDisplay>(person);
var person=\u db.People.Single(q=>q.Id==5);
//直接使用automapper映射对象
返回Mapper.Map(人);
我想把这个缩短到

  var person = _db.People.Single(q=>q.Id == 5);

  //use extension method to map 
  return person.MapTo<PersonDisplay>()  
var person=\u db.People.Single(q=>q.Id==5);
//使用扩展方法映射
return person.MapTo()

如果要将其缩短为

,则不能。泛型参数必须全部为显式或隐式。您无法让编译器推断其中一个而提供另一个。因此,您将需要不同的API。可能是通过中间环节,所以你可以:

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

这是可能的。

你不能。泛型参数必须全部为显式或隐式。您无法让编译器推断其中一个而提供另一个。因此,您将需要不同的API。可能是通过中间环节,所以你可以:

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

这是可能的。

你的问题真的不清楚——恐怕我不知道你在问什么。请编辑并澄清。我猜您希望能够调用
someTSourceObj.MethodName()
,而不必显式声明
TSource
,比如:
someTSourceObj.MethodName()
?我用我想做什么的用法示例更新了问题@chrissinclair我想做什么@chrissinclair你的问题真的不清楚-恐怕我不知道你在问什么。请编辑它并澄清。我猜您希望能够调用
someTSourceObj.MethodName()
,而不必显式声明
TSource
,比如:
someTSourceObj.MethodName()
?我用一个用法示例更新了这个问题,说明我想做什么才是真正想做的@ChrisSinclair