.net 4.0 为什么Contract.assures(Contract.Result<;…>;!=null)不起作用?
为什么在此代码示例上收到警告“CodeContracts:可能对空引用“stream.”调用方法”.net 4.0 为什么Contract.assures(Contract.Result<;…>;!=null)不起作用?,.net-4.0,httpwebrequest,code-contracts,.net 4.0,Httpwebrequest,Code Contracts,为什么在此代码示例上收到警告“CodeContracts:可能对空引用“stream.”调用方法” public static void Test() { var request = (HttpWebRequest)HttpWebRequest.Create("some url"); Contract.Assume(request != null); var stream = request.GetRequestStream(); stream.Flush();
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");
}
公共虚拟流GetRequestStream()
{
Contract.Contract(Contract.Result()!=null,null,“Contract.Result()!=null”);
}
该合同被忽略,因为没有适用的方法。HttpWebRequest
中没有公共虚拟流GetRequestStream。然而,在WebRequest
中有一个公共虚拟流GetRequestStream
,在HttpWebRequest
中有一个公共重写流GetRequestStream
,但它们在System.contracts.dll
中都没有任何契约
您可以将其报告为错误,并且可以使用
契约。假设以避免警告。该契约被忽略,因为没有适用于它的方法。HttpWebRequest
中没有公共虚拟流GetRequestStream
。然而,在WebRequest
中有一个公共虚拟流GetRequestStream
,在HttpWebRequest
中有一个公共重写流GetRequestStream
,但它们在System.contracts.dll
中都没有任何契约
您可以将其报告为一个bug,并且可以使用Contract。假设
可以避免警告。我可以复制这个,它看起来像一个bug。你可以试着在代码契约论坛上提问:我可以复制这个,它看起来像一个bug。您可以尝试在代码合同论坛上提问: