我有一個泛型類應該允許任何類型,基元或其他。唯一的問題是使用default(T)
。當您在值類型或字符串上調用默認值時,會將其初始化爲合理的值(如空字符串)。當您在對象上調用default(T)
時,它將返回null。由於各種原因,我們需要確保如果它不是原始類型,那麼我們將有一個類型的默認實例,而不是 null。這裏是嘗試1:測試泛型類型是字符串的最佳方法是什麼? (C#)
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
問題 - 字符串不是一個值類型,但它沒有無參數的構造函數。因此,目前的解決方案是:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
但是,這感覺就像一個雜牌。有更好的方法來處理字符串的情況嗎?
我以爲我試過早些時候,解決方案,它沒有工作,但我一定做了一些愚蠢的事情。感謝您指出默認(字符串)返回null,我們沒有因爲它而遇到錯誤,但這是真的。 – 2010-05-29 00:32:26
@Matt Hamilton:+1,但你應該更新你的答案,返回CodeInChaos建議的'(T)(object)String.Empty',因爲方法返回類型是泛型的,你不能只返回字符串。 – VoodooChild 2012-01-23 17:04:09