【问题标题】:Variable is null, but right hand is not null变量为空,但右手不为空
【发布时间】:2018-11-20 03:35:35
【问题描述】:

在调试时我发现了一些奇怪的东西:

结果 var 在鼠标悬停和手表中都显示为 null,但右侧实际上返回的是非 null 值,正如您在手表中看到的那样。

有什么想法吗?

EDIT:结果变量也在IF语句中声明,如下所示:

if (somethingIsTrue) { var result = xxx; }
else { var result = yyy; }

我将第二个结果重命名为其他结果后,一切都开始正确显示。

【问题讨论】:

  • 清理并重建?
  • 可能是多重评估的情况?第一次调用为空,将其放入结果中。第二次调用(在 Watch 中显示)获取一个值。 GetCachedData() 是做什么的?
  • 实际上在主 if 块中也定义了结果变量,所以可能这就是导致它的原因。 if (something) { var 结果 = xxx; } 其他 { var 结果 = yyy; } 一旦我将它重命名为 Else 块中的其他东西 - 一切都正确显示。
  • 嗯。您可能只是遇到了延迟执行。 blogs.msdn.microsoft.com/charlie/2007/12/10/…
  • @pbrian 不相信这里的问题可能是延迟执行。看看手表,右手表达式确实返回了一个对象实例,而不是一些 IQueryable 或其他东西。看起来更像是美世所说的。

标签: c# visual-studio debugging visual-studio-2017


【解决方案1】:

当你的代码是这样的时候

if (somethingIsTrue) { var result = xxx; } else { var result = yyy; }

然后在该 if 语句的范围内(重新)声明“结果”变量。这意味着该值仅在该块内可用。

解决方案:在块之外声明变量(如果您还没有这样做的话)并删除 'if' 和 'else' 块内的 'var'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2020-02-11
    • 2020-08-12
    • 1970-01-01
    相关资源
    最近更新 更多