可空类型作为泛型参数
可空值类型,例如 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中文网其他相关文章!