爲什麼.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前檢查返回值。爲什麼?
自動應答:沒有在代碼中警告級別合同的配置。我應該從低到高。
可能是因爲它不爲空。嘗試檢查'if(sLastName.IsNullOrEmpty())'而不是。 – 2012-06-27 12:18:05
@ 0A0D - 如果你輸入字符串「NULL」,你*會得到一個'null'返回值。 –
@HansKesting:啊,錯過了。 – 2012-06-27 12:27:18