更新:2007 年 11 月

错误消息

不能将类型“type1”用作泛型类型或方法“name”中的类型参数“name”。可为 null 的类型“type1”未满足“type2”的约束。

可为 null 的类型与其对应的不可为 null 的类型截然不同;不能在这两者之间执行隐式引用转换或标识转换。可为 null 的装箱转换未满足泛型类型约束。在下面的示例中,第一个类型参数为 Nullable<int>,而第二个类型参数为 System.Int32

更正此错误

  1. 移除约束。

  2. 在下面的示例中,使第二个类型参数为 int?object

示例

下面的代码生成 CS0312:

 复制代码
// cs0312.cs
class Program
{
    static void MTyVar<T, U>() where T : U { }

    static int Main()
    {
        MTyVar<int?, int>(); // CS0312
        return 1;
    }
}

虽然可为 null 的类型与不可为 null 的类型截然不同,但允许在可为 null 的值和不可为 null 的值之间执行各种转换。

请参见

参考

可空类型(C# 编程指南)