[英]Generics: constraints on nullable types
以下內容無法編譯
public static T Retrieve<T>(this NameValueCollection collection, String key) where T : Object
{
if (collection.AllKeys.Contains(key))
{
try
{
val = (T)Convert.ChangeType((object)collection[key], typeof(T));
}
catch { }
}
return val;
}
因為約束不能是對象類。 那么有沒有一種方法可以將T禁忌為任何可以設置為null的值呢?
where T : class
您當前的約束, where T : Object
表示“任何來自System.Object或從System.Object繼承的東西”,即:一切。 所有類型(包括Int32和String)都從System.Object繼承。 因此,限制對象將無濟於事。
編輯:和往常一樣,埃里克(Eric) 以一種更為准確的方式對此進行了說明 :
“在C#中,每種類型都源自對象”。 不對! 糾正這個神話的方法是簡單地將“源自”轉換為“可轉換為”,並忽略指針類型: C#中的每個非指針類型都可以轉換為對象。
我認為不可能將您的泛型參數純粹限制為可為空的類型。 您可以輕松地將其約束為引用類型(如上一個答案),但是,盡管所有引用類型都是可為空的,但並非所有可為空的都是引用類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.