考虑这样一种情况,我们有一个泛型方法应该能够返回 T 的空引用,因此 T 必须是可为空的。
有点像这样:
public static T GetNullableTypeTest<T>()
{
Contract.Requires(!typeof(T).IsValueType || Nullable.GetUnderlyingType(typeof(T)) != null);
return (T)(object)null;
}
CC 似乎根本不理解我们正在尝试做什么,它提示拆箱 null 和方法调用导致“未经证实”的警告。
有什么方法可以在代码契约中强制执行此约束?
最佳答案
这不是代码契约(Contract)问题。您应该对您的方法施加约束,如下所示:
public static T GetNullableTypeTest<T>() where T : class
这样就不能调用此方法将值类型作为 T 传递。从那里开始,将有意义的契约放入方法的主体中。
关于c# - 我们可以在代码契约中对泛型类型强制为 nullability 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28021224/