【问题标题】:Why does resharper think asp.net Request["abc"] can never be null?为什么 resharper 认为 asp.net Request["abc"] 永远不能为空?
【发布时间】:2018-01-17 18:36:31
【问题描述】:

我正在使用 ASP.NET 网络表单,我有一个这样的片段:

string errorId = Request["errorid"];
if (errorId != null) ...

Resharper 对第二行说“表达式始终为真”,并希望删除条件。

文档https://msdn.microsoft.com/en-us/library/system.web.httprequest.item(v=vs.110).aspx明确表示如果找不到指定的键,则返回NULL。

为什么 R# 认为索引器永远不能返回 null?除了忽略警告之外,我还能做些什么来解决它?

我在撰写本文时使用的是最新版本 (2017.3.1)

【问题讨论】:

  • 看看这个question
  • @BWA 总结一下我的理解,JetBrains 的某个人手动搜索了大量 .NET API 并记录了哪些永远不会返回 null,并将其硬编码到 Resharper 中,但他们已经在这种情况下有错误吗?

标签: c# resharper


【解决方案1】:

好的,多亏了一位同事,我才发现这一直是我的错。我把我的答案放在这里,以防它对其他人有用,但我猜版主可能会删除整个内容。

我贴的代码sn-p不完整;实际代码更像这样:

string errorId = Request["errorid"];
log.Debug(HttpUtility.HtmlEncode(errorId));
if (errorId != null) ...

R# 正确计算的是,如果 errorId 为 null,“log”行将引发异常,因此当它到达“if”行时,errorId 不能为 null。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 2016-09-07
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    相关资源
    最近更新 更多