使用扩展参数的类型传递作为泛型类型参数
问题描述:
我试图编写和推广方法,它接受这个参数的类型,并将它传递到一般类型化的方法,即使用扩展参数的类型传递作为泛型类型参数
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>()
要缩短这
答
你不能。通用参数必须全部显式或全部隐含。你不能让编译器推断一个,但提供另一个。因此你将需要一个不同的API。也许通过一个中间,所以你有这样的东西:
obj.Foo().Bar<AnotherType>();
这是可能的。
你的问题真的不清楚 - 恐怕我不知道你在问什么。请编辑并澄清。 – 2013-04-05 21:03:32
我想你可以调用'someTSourceObj.MethodName()'并跳过显式声明'TSource'就像:'someTSourceObj.MethodName ()'? –
2013-04-05 21:04:39
我更新了一个使用示例,我想要做什么 – 2013-04-05 21:24:49