2012-09-10 93 views
3

我正在做一個配置提供商,在我服務層我有這樣的:C#泛型返回值

public string GetValue(string key) 
{ 
    return _ctx.Configurations.SingleOrDefault(q => q.Key == key).Value; 
} 

但我怎麼能獲取的價值在它的原始類型,我想做到像這樣的:

public T GetValue<T>(string key) 
{ 
    return (T)(object)_ctx.Configurations.Single(q => q.Key == key).Value; 
} 

正如此間指出,https://stackoverflow.com/a/9420236/544283,這將是一個濫用仿製藥 ...我可以忍受的。

因爲我知道類型我可以在方法外拋出值,並將其作爲字符串在方法內部處理,但我想避免這種情況。

+1

Value有什麼類型?如果Value屬性是例如T的基類型,你可以設置T的where約束,然後直接進行轉換而不需要對象部分。 – Centro

+0

由於值主要是字符串,int,布爾和日期時間我想我可以使用'where T:IConvertible'來限制它。 – Esteban

回答

7

只要你確信,中投不會失敗,你可以使用:

var value = _ctx.Configurations.Single(q => q.Key == key).Value; 
return (T)Convert.ChangeType(value, typeof(T)); 

如果你想要安全,你應該做一些額外的檢查,以確保該值實際上是投射到所需的類型。