为什么我收到警告“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");
}
答案 0 :(得分:1)
该合约被忽略,因为它没有适用的方法。 public virtual Stream GetRequestStream
中没有HttpWebRequest
。但是public virtual Stream GetRequestStream
中有一个WebRequest
,public override Stream GetRequestStream
中有一个HttpWebRequest
,但System.Contracts.dll
中没有任何合同。
您可以将其报告为错误,并且可以使用Contract.Assume
来避免警告。