编译器错误 CS0313
在泛型类型或方法“type 2”中不能将类型“type1”用作泛型类型“parameter name”。 可以为 null 的类型“type1”不满足“type2”的约束。 可以为 null 的类型不能满足任何接口约束。
可以为 null 的值类型与其不可为 null 的对应项不相等。 在以下示例中, ImplStruct
满足 BaseInterface
约束但 ImplStruct?
不满足,因为 Nullable<ImplStruct>
不实现 BaseInterface
。
用以下代码作为示例,一种解决方案是在调用
ImplStruct
时指定一个普通的TestMethod
作为第一个类型。 然后修改TestMethod
以在返回语句中创建一个可为 null 的Implstruct
版本:return new Nullable<T>(t);
以下代码生成 CS0313:
// cs0313.cs
public interface BaseInterface { }
public struct ImplStruct : BaseInterface { }
public class TestClass
{
public T? TestMethod<T, U>(T t) where T : struct, U
{
return t;
}
}
public class NullableTest
{
public static void Run()
{
TestClass tc = new TestClass();
tc.TestMethod<ImplStruct?, BaseInterface>(new ImplStruct?()); // CS0313
}
public static void Main()
{ }
}