为什么Contract.Ensures(Contract.Result< ...>!= null)不起作用?

时间:2012-01-24 17:02:46

标签: .net-4.0 httpwebrequest code-contracts

为什么我收到警告“CodeContracts:可能在空引用'流'上调用方法。”在这个代码示例?

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
}

我问,因为我在System.Contracts.dll上使用了Reflector,并且在HttpWebRequest类的GetRequestStream()方法中有下一行:

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

1 个答案:

答案 0 :(得分:1)

该合约被忽略,因为它没有适用的方法。 public virtual Stream GetRequestStream中没有HttpWebRequest。但是public virtual Stream GetRequestStream中有一个WebRequestpublic override Stream GetRequestStream中有一个HttpWebRequest,但System.Contracts.dll中没有任何合同。

您可以将其报告为错误,并且可以使用Contract.Assume来避免警告。