2009-07-10 94 views
0

我們已經創建了一個通用的方法,像這樣內確定返回值的類型:如何泛型方法

 
public TReturnType GetValue(string key) 
{ 
    var configurationParameter = (from cp in _repository.ConfigurationParameters 
     where cp.ConfigurationParameterKey == key 
     select cp).FirstOrDefault(); 

    var returnValue (TReturnType)Convert.ChangeType(configurationParameter.ConfigurationParameterValue, typeof (TReturnType)); 
    return returnValue; 
} 

現在,我們希望把一些錯誤的這種方法處理,這樣的情況下,我們期待着一個我們可以做的數字類型,例如,一個int.TryParse(returnValue,out myNewInt)。當然,要做到這一點,我們必須能夠確定方法內的TReturnType類型。

有沒有辦法做到這一點?

感謝您的幫助。 此致敬禮。

回答

2

當然,只添加一些像這樣的代碼:

if(typeof(TReturnType) == typeof(int)) 
{ 
    var number = (int)returnValue; 
    //Validate your output 
} 
+0

哦,我的天啊!這太簡單了,絕對讓人尷尬。我現在肯定需要回家。 謝謝。 – 2009-07-10 20:46:50

3

當然,但你應該考慮這是否是一個好主意。你總是可以說

if (typeof(T) == typeof(int)) whatever 

但是這樣做有點不好的代碼味道。泛型的整點是是通用的。如果你有特殊用途代碼爲T時是一個整數,那麼爲什麼不簡單地增加另一個方法來處理完整的大小寫?

+0

我在一個支持3種ID的泛型集合上做了這個:字符串,整數和GUID。其他任何東西都會拋出一個未實現的異常。 – 2009-07-10 20:36:59