为什么 Contract.Ensures(Contract.Result<...>!=null) 不起作用?

发布于 2024-12-28 20:14:27 字数 601 浏览 0 评论 0 原文

为什么我收到警告“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");
}

Why do I got warning "CodeContracts: Possibly calling a method on a null reference 'stream'." on this code sample?

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
}

I am asking because I use Reflector at System.Contracts.dll and there is next line in GetRequestStream() method of HttpWebRequest class:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心如荒岛 2025-01-04 20:14:27

该合同被忽略,因为没有适用它的方法。 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 in HttpWebRequest. There is, however, a public virtual Stream GetRequestStream in WebRequest, and there is a public override Stream GetRequestStream in HttpWebRequest, but neither of those have any contracts in System.Contracts.dll.

You can report it as a bug, and you can use Contract.Assume to avoid the warning.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文