2013-04-05 315 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>(); 

這是可能的。