.net 4.0 为什么Contract.assures(Contract.Result<;…>;!=null)不起作用?

.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();

为什么在此代码示例上收到警告“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
}
我这样问是因为我在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。您可以尝试在代码合同论坛上提问: