更新:2007 年 11 月
错误消息
不能将类型“type1”用作泛型类型或方法“type2”中的类型参数“parameter name”。可为 null 的类型“type1”未满足“type2”的约束。可为 null 的类型无法满足任何接口约束。可为 null 的类型与其不可为 null 的对应项不是等效的。在下面的示例中,ImplStruct 满足 BaseInterface 约束,但 ImplStruct? 不满足该约束,因为 Nullable<ImplStruct> 未实现 BaseInterface。
更正此错误
使用下面的代码作为示例时,一种解决方案是将常规 ImplStruct 指定为对 TestMethod 的调用中的第一个类型参数。然后,修改 TestMethod,在其返回语句中创建 Implstruct 的可为 null 的版本:
复制代码 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() { } } |