为什么.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。为什么呢?
自动应答:代码合同配置中存在警告级别。我应该把它从低到高。
答案 0 :(得分:2)
根据this msdn页面,如果您没有在Visual Studio中安装正确的插件,则不会强制执行合同。你安装了那个插件吗?
您必须安装Visual Studio加载项才能强制执行合同。代码 Contracts Premium Edition加载项允许您指定静态和运行时 检查项目“属性”页面上的代码合同。如果你这样做 不启用运行时检查,合同,如Contract.Ensures 如果是合同,方法将不会在运行时抛出异常 侵犯。 Visual Studio加载项不随Visual Studio一起提供 2010或Windows SDK。