2012-01-24 24 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來避免該警告。

相關問題