考虑一种情况,我们有一个泛型方法应该能够返回T的空引用,因此T必须是可空的。
有点像这样:
public static T GetNullableTypeTest<T>()
{
Contract.Requires(!typeof(T).IsValueType || Nullable.GetUnderlyingType(typeof(T)) != null);
return (T)(object)null;
}
CC似乎根本不了解我们正在尝试做什么,它抱怨取消装箱null和方法调用导致&#34;未经证实&#34;警告。
有没有办法在代码合同中强制执行此约束?
答案 0 :(得分:1)
这不是代码合同问题。你应该对你的方法设置一个约束,如下所示:
public static T GetNullableTypeTest<T>() where T : class
这样就不能调用此方法将值类型传递为T.从那里开始,将有意义的契约放在方法体中。