簡體   English   中英

不可空類型的通用約束

[英]Generic Constraint for Non Nullable types

我有以下課程:

public class KeyDTO<T>
{
     public T Id { get; set; }
}

到目前為止一切順利,但我希望類型參數T是不可為空的類型。 我在某處讀到這可能是可行的:

public class KeyDTO<T> where T : IComparable, IComparable<T>
{
     public T Id { get; set; }
}

但是,如果我將public T Id更改為public T? Id public T? Id ,我收到一個編譯錯誤,告訴我T必須不可為空。

如何指定泛型類型參數必須不可為空?

編輯

我想完成此操作,因為我想使用[Required]屬性注釋我的Id屬性,如下所示:

public class KeyDTO<T> {
    [Required]
    public T Id { get; set; }
}

[Required]所做的是驗證模型,因此T不能為空。

但是,如果我有KeyDTO<int>Id將被初始化為0 ,繞過我的[Required]屬性

從 C# 8.0 開始,您現在可以使用where T : notnull泛型約束來指定T是不可為空的類型。

應用where T : struct應用通用約束,即T是不可為空的值類型。 由於不存在不可為空的引用類型,因此這與簡單地“所有不可為空的類型”具有完全相同的語義。 可空值類型(即Nullable<T> )不滿足struct泛型約束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM