使用英语阅读

通过


编译器错误 CS0313

在泛型类型或方法“type 2”中不能将类型“type1”用作泛型类型“parameter name”。 可以为 null 的类型“type1”不满足“type2”的约束。 可以为 null 的类型不能满足任何接口约束。

可以为 null 的值类型与其不可为 null 的对应项不相等。 在以下示例中, ImplStruct 满足 BaseInterface 约束但 ImplStruct? 不满足,因为 Nullable<ImplStruct> 不实现 BaseInterface

更正此错误

  1. 用以下代码作为示例,一种解决方案是在调用 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()  
    { }  
}  

另请参阅