代码合同不检查空条件。为什么?

时间:2012-06-27 12:15:56

标签: c# .net code-contracts

为什么.NET合同没有抱怨这段代码?

private static User GetUser()
{
    var sFirstName = Console.ReadLine();
    var sLastName = Console.ReadLine();
    if (sLastName == "NULL")
    {
        return null;
    }
    else
    {
        return new User(sLastName, sFirstName);
    }
}
public static int Main(string[] args)
{
        var oUser = GetUser();
        DisplayUser(oUser);
        Console.ReadLine();
        return 0;
}
private static void DisplayUser(User user)
{
    Contract.Requires(user != null);
    Console.WriteLine(user.ToString());
}

GetUser可以返回null,但是契约从未说过我必须先检查返回值,然后再将其传递给DisplayUser。为什么呢?


自动应答:代码合同配置中存在警告级别。我应该把它从低到高。

1 个答案:

答案 0 :(得分:2)

根据this msdn页面,如果您没有在Visual Studio中安装正确的插件,则不会强制执行合同。你安装了那个插件吗?

  

您必须安装Visual Studio加载项才能强制执行合同。代码   Contracts Premium Edition加载项允许您指定静态和运行时   检查项目“属性”页面上的代码合同。如果你这样做   不启用运行时检查,合同,如Contract.Ensures   如果是合同,方法将不会在运行时抛出异常   侵犯。 Visual Studio加载项不随Visual Studio一起提供   2010或Windows SDK。