Contracts for .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:コードコントラクト構成に警告レベルがあります。私はそれを低いものから高いものへと置くべきだった。