Почему не работает Contract.Ensures (Contract.Result <...>! = Null)? - PullRequest
1 голос
/ 24 января 2012

Почему я получил предупреждение "CodeContracts: возможно, вызов метода для пустой ссылки" stream "." в этом примере кода?

public static void Test()
{
    var request = (HttpWebRequest)HttpWebRequest.Create("some url");
    Contract.Assume(request != null);
    var stream = request.GetRequestStream();
    stream.Flush(); // WARNING IN THIS LINE
}

Я спрашиваю, потому что я использую Reflector в System.Contracts.dll, а в методе GetRequestStream () класса HttpWebRequest есть следующая строка:

public virtual Stream GetRequestStream()
{
    Contract.Ensures(Contract.Result<Stream>() != null, null, "Contract.Result<System.IO.Stream>() != null");
}

1 Ответ

1 голос
/ 21 марта 2012

Этот контракт игнорируется, потому что нет метода, к которому он применяется.В HttpWebRequest нет public virtual Stream GetRequestStream.Однако есть public virtual Stream GetRequestStream в WebRequest и public override Stream GetRequestStream в HttpWebRequest, но ни у одного из них нет контрактов в System.Contracts.dll.

Вы можете сообщить об этом какошибка, и вы можете использовать Contract.Assume, чтобы избежать предупреждения.

...