我们是否可以对代码合同中的泛型类型强制执行可空性?

时间:2015-01-19 09:17:27

标签: c# generics code-contracts

考虑一种情况,我们有一个泛型方法应该能够返回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;警告。

有没有办法在代码合同中强制执行此约束?

1 个答案:

答案 0 :(得分:1)

这不是代码合同问题。你应该对你的方法设置一个约束,如下所示:

public static T GetNullableTypeTest<T>() where T : class

这样就不能调用此方法将值类型传递为T.从那里开始,将有意义的契约放在方法体中。