2012-01-24 13 views
1

なぜ私は "CodeContracts:おそらくヌル参照 'ストリーム'でメソッドを呼び出すのですか?"このコードサンプルでは?なぜContract.Ensures(Contract.Result <...>!= null)が動作しないのですか?

私はSystem.Contracts.dllでリフレクターを使用して、次の行は、HttpWebRequestのクラスのGetRequestStream()メソッドにありますので、私は求めています
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 
} 

:方法がないので、契約が無視されていることを

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

私はこれを複製でき、バグのようです。コード契約フォーラムで質問することができます:http://social.msdn.microsoft.com/Forums/en-NZ/codecontracts/threads – porges

答えて

1

それが適用される。 HttpWebRequestにはpublic virtual Stream GetRequestStreamがありません。ただし、はWebRequestにあり、HttpWebRequestにはpublic override Stream GetRequestStreamがありますが、どちらもSystem.Contracts.dllに契約していません。

これはバグとして報告でき、Contract.Assumeを使用すると警告を回避できます。

関連する問題