c# - 为什么 Nullable<T> 不匹配作为泛型约束的引用类型

标签 c# generics nullable reference-type generic-constraints

<分区>

Possible Duplicate:
Nullable type as a generic parameter possible?

我遇到了一件非常奇怪的事情,它有泛型类型约束。我有这样一个类:

public SomeClass<T> where T:class
{
}

但是,我发现我不能像我期望的那样使用可为 null 的类型:

new SomeClass<int?>();

我收到一条错误消息,提示 int? 必须是引用类型。 Nullable 真的只是一个带有语法糖以使其看起来像引用类型的结构吗?

最佳答案

Nullable<T>struct (参见 MSDN )然而它是唯一的 struct不满足 struct约束。因此,您不能使用 Nullable作为泛型类型参数时 classstruct使用约束条件。

Nullable<T>不仅仅是带有一些语法糖的结构。它在 CLR 中对其某些行为有特殊支持。例如,它有特殊的拳击行为。具体来说,可空值永远不会被装箱。基础值是盒装的。如果可为空的是空值(HasValue 为假),则它被转换为空引用。此外,任何 Nullable<T> 的转换运算符至 Nullable<U>T 的转换中解除至 U .这些是您无法在 .NET 1.0/1.1 中实现的功能。

关于c# - 为什么 Nullable<T> 不匹配作为泛型约束的引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794554/

相关文章:

c# - 我应该为 DataAccess 常用运算符使用静态方法吗?

c# - 当前 OperationContext 在 WCF Windows 服务中为 null

c# - 如何确定生日或周年纪念日是否发生在日期范围内

java - 如何将 Java 反射与通用参数一起使用

c# - 抽象工厂模式而不是泛型——怎么样?

c# - 如何将 int NULL 插入数字数据库字段?

c# - 为什么没有 Nullable<T>.Equals(T value) 方法?

c# - 在 silverlight 项目中引用 asp.net c# 类/方法

Java 8 和广义目标类型推断

c# - Nullable<T> 的装箱/拆箱行为如何可能?