2014-10-06 40 views
0

我具有以下通用類:如何在c#中編寫一個通用函數,它將根據類的類型調用不同的函數?

​​

和列表中SearchModel類可以是類型A/B的。 現在我有這兩個函數調用,它給了我適當的結果。

public List<A> SearchApplicationsForA(SearchModel<A> model){ 
} 

public List<B> SearchApplicationsForB(SearchModel<B> model){ 
} 

我想知道是否可以編寫一個通用函數,它可以識別T的類型並調用相應的函數。例如。

public List<T> SearchApplications<T>(SearchModel<T> model) 
    { 
     if (typeof(T) == typeof(A)) 
     { 
      return SearchVerificationsForA(model); 
     } 
     else if (typeof(T) == typeof(B)) 
     { 
      return SearchApplicationsForB(model); 
     } 
    } 

是否可以編寫這樣的函數?

+0

看看這個[SO後(http://stackoverflow.com/questions/2004508/checking-type-parameter-of-a-generic -method-in-c-sharp) – Michael 2014-10-06 19:35:47

+2

當你的代碼不是通用的時,你不需要泛型方法。 – 2014-10-06 19:38:23

+1

會不會是你最好的朋友? – Icemanind 2014-10-06 19:39:50

回答

0

你能不能

public List<A> SearchApplications(SearchModel<A> model) { 
    return SearchVerificationsForA(model); 
} 

public List<B> SearchApplications(SearchModel<B> model) { 
    return SearchVerificationsForB(model); 
} 

甚至沒有與測試類型煩?

+0

這無疑是可行的,除了它使用函數重載,而不是通用對象。這很可能是OP *應該去的方向;但並沒有真正回答所述的問題。 – BradleyDotNET 2014-10-06 19:39:51

+0

是的,我同意,這是更可能的選擇。 – xori 2014-10-06 19:41:53

+0

我已經有兩個獨立的函數調用上面提到的方法,但正在檢查是否有更好的方法來編碼。 – 2014-10-06 19:49:33

0

你應該考慮這樣的語法來代替:

public List<T> SearchApplications<T>(SearchModel<T> model) 
{ 
    if (model is A) 
    { 
     return SearchVerificationsForA(model); 
    } 
    else if (model is B) 
    { 
     return SearchApplicationsForB(model); 
    } 
} 
+0

我試過這種方式,但這兩個函數調用由於無效參數而無法編譯。這可能是因爲預期的參數是兩者的模板參數。 – 2014-10-06 19:47:28

相關問題