可空型別作為泛型參數
可空值型,例如 int?,表示保留值或為空的可能性。雖然處理可為空資料很方便,但將它們用作泛型參數時存在限制。
考慮以下程式碼片段:
myYear = record.GetValueOrNull<int?>("myYear");
此程式碼嘗試將 GetValueOrNull 傳回的可為空值指派給可為 null 的 int 變數 (myYear)。但是,編譯器會拋出錯誤:「類型'int?'必須是引用類型才能將其用作泛型類型或方法中的參數「T」。」
這裡的問題是GetValueOrNull 被定義為傳回引用類型(物件),而不是可以為null 的值類型。要解決此問題,請將返回類型更改為Nullable
static void Main(string[] args) { int? i = GetValueOrNull<int>(null, string.Empty); } public static Nullable<T> GetValueOrNull<T>(DbDataRecord reader, string columnName) where T : struct { object columnValue = reader[columnName]; if (!(columnValue is DBNull)) return (T)columnValue; return null; }
透過將返回類型更改為Nullable
以上是為什麼可空值型別不能直接用作 C# 中的泛型型別參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!