编译器错误 CS0312
不能将类型“type1”用作泛型类型或方法“name”中的类型参数“name”。 可以为 null 的类型“type1”不满足“type2”的约束。
可以为 null 的值类型与其不可为 null 的对应类型不同;它们之间不存在隐式引用转换或标识转换。 可以为 null 的装箱转换不满足泛型类型约束。 在以下示例中,第一个类型形参是 Nullable<int>
,第二个类型形参是 System.Int32
。
删除该约束。
在以下示例中,令第二个类型实参为
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 值之间允许存在各种类型的转换。