2012-01-24 25 views
1

为什么我会收到警告“CodeContracts:可能在空引用'流上调用方法'”。在这个代码示例?为什么Contract.Ensures(Contract.Result <...>!= null)不起作用?

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并且在GetRequestStream()下一行的方法HttpWebRequest类:

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

我可以复制这个,它看起来像一个错误。您可以尝试在Code Contracts论坛上询问:http://social.msdn.microsoft.com/Forums/en-NZ/codecontracts/threads – porges

回答

1

该合同被忽略,因为没有方法适用于它。 HttpWebRequest中没有public virtual Stream GetRequestStream。然而,在WebRequest中有public virtual Stream GetRequestStream,并且在HttpWebRequest中有public override Stream GetRequestStream,但这两者在System.Contracts.dll中都没有任何合同。

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

相关问题