为什么 Contract.Ensures(Contract.Result<...>!=null) 不起作用?
为什么我收到警告“CodeContracts:可能在空引用‘流’上调用方法。”在此代码示例上?
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");
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
该合同被忽略,因为没有适用它的方法。
HttpWebRequest
中没有公共虚拟流 GetRequestStream
。但是,WebRequest
中有一个public virtual Stream GetRequestStream
,并且HttpWebRequest
中有一个public override Stream GetRequestStream
>,但它们在System.Contracts.dll
中都没有任何合约。您可以将其报告为错误,并且可以使用Contract.Assume 来避免警告。
That contract is ignored because there is no method to which it applies. There is no
public virtual Stream GetRequestStream
inHttpWebRequest
. There is, however, apublic virtual Stream GetRequestStream
inWebRequest
, and there is apublic override Stream GetRequestStream
inHttpWebRequest
, but neither of those have any contracts inSystem.Contracts.dll
.You can report it as a bug, and you can use
Contract.Assume
to avoid the warning.