3

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

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 に答える