2013-04-05 205 views
1

我试图编写和推广方法,它接受这个参数的类型,并将它传递到一般类型化的方法,即使用扩展参数的类型传递作为泛型类型参数

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

哪有我假设这个参数的类型作为目标方法的类型,这可能是在调用方法时定义TSource的可能性

说明:我想创建一个帮助器方法,以便我可以直接从对象中调用MethodName,使用2种类型的预先写入的泛型方法,所以我想将其缩短为单个目标类型和h AVE该方法假定对象的类型被传递到扩展方法

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

你的问题真的不清楚 - 恐怕我不知道你在问什么。请编辑并澄清。 – 2013-04-05 21:03:32

+0

我想你可以调用'someTSourceObj.MethodName ()'并跳过显式声明'TSource'就像:'someTSourceObj.MethodName ()'? – 2013-04-05 21:04:39

+0

我更新了一个使用示例,我想要做什么 – 2013-04-05 21:24:49

回答

1

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

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

这是可能的。