[英]How to write universal generic type handling nullable values and references?
public sealed class MyClass<T>
{
private T? myField;
}
這段代碼編譯得很好,但是當我將它與引用類型(如 T=string)一起使用時,我將得到可為空的myField
(如預期的那樣)。 但是當我使用值類型(如int
)時,我會得到我沒想到的不可為空的myField
,特別是考慮到沒有錯誤。
是否可以編寫持有可空值或引用的通用類型?
T?
引用類型和值類型的含義完全不同。 對於值類型,它實際上只是Nullable<T>
的一個語法糖,而對於引用類型,它只是一個可以忽略的提示。 如果你想讓MyClass
包裝一個可為 null 的int
然后將它與int?
類型: MyClass<int?>
。
您可以使用where T: struct
來約束T
- 然后是T?
將真正意味着Nullable<T>
並且您最初在使用MyClass<int>
時會得到myField
等於null
,但您將不再能夠使用例如MyClass<string>
。
據我所知,您不能混合兩種行為並讓運行時根據通用T
類型選擇一種行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.