3

为什么 .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 之前检查它。为什么?


AutoAnswer:代码合同配置中有警告级别。我应该把它从低到嗨。

4

1 回答 1

2

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

您必须安装 Visual Studio 加载项才能强制执行合同。Code Contracts Premium Edition 加载项允许您在项目属性页面上指定代码合同的静态和运行时检查。如果您不启用运行时检查,则 Contract.Ensures 等合约在违反合约的情况下不会在运行时抛出异常。Visual Studio 加载项不随 Visual Studio 2010 或 Windows SDK 一起提供。

于 2012-06-27T12:20:14.887 回答