c# - 我们可以在代码契约中对泛型类型强制为 nullability 吗?

标签 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 和方法调用导致“未经证实”的警告。

有什么方法可以在代码契约中强制执行此约束?

最佳答案

这不是代码契约(Contract)问题。您应该对您的方法施加约束,如下所示:

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

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

关于c# - 我们可以在代码契约中对泛型类型强制为 nullability 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28021224/

相关文章:

c# - ReSharper - 使用 Microsoft.Contracts 时可能的空分配

c# - .Net 4 Code Contracts 静态分析器的任何替代品?

c# - SoundPlayer 导致内存泄漏?

c# - 在另一个线程中动态添加控件到 WinForms

c# - 为什么参数化通用接口(interface)的 GetMethods() 返回非参数化 MethodInfo

java - 避免返回通配符类型

c# - 我是否应该在发布版本上为 .NET 4.0 打开代码契约的运行时检查?

c# - 我应该在 DDD 域项目中验证吗?

c# - ASP.NET WebAPI JSON 绑定(bind)区分大小写

Java泛型工厂实现