gpt4 book ai didi

c# - ReSharper 错误?不正确的 "expression is always true"

转载 作者:太空狗 更新时间:2023-10-30 00:21:24 26 4
gpt4 key购买 nike

我相信我在 ReSharper 中发现了一个错误。假设我有如下代码:

int[] someArray = new int[10];
while (someArray != null)
{
//perhaps some other usage of someArray here, but not assigning it.
SomeMethod(ref someArray );
}

如果局部变量 someArray 在它的范围内没有被赋值为 null,那么语句 someArray != null 将永远为真。但当该变量作为引用参数提供给另一个方法时情况并非如此,因为它可以在该方法中分配给 null 。然后 ReSharper 错误地假定 someArray != null 仍然始终为真。

我想我应该分享这些信息,因为我不确定我应该用它做什么。首先我希望有人验证这个错误,然后将它发送给 JetBrains?

最佳答案

嗯,看来ReSharper的静态分析比我聪明....我在其中正确获得“表达式始终为真”警告的代码是:

int[] someArray = new int[10];
while (someArray != null)
{
Foo(ref someArray);
someArray.Bar();
}

我收到警告说 someArray != null 是多余的,所以我认为 ReSharper 误解了 ref 参数,因为 someArray 实际上可以分配给 null。但这不是警告正确的原因。然后一个微妙的事实发挥了作用:someArray 为 null 意味着 Bar 的方法调用将抛出一个 NullReferenceException,并且随着那个改变控制流使得没有到达 while 循环的开始。因此,即使在 Foo 中将 someArray 分配给 null,警告也是正确的。

我的错误,感谢大家的努力。

关于c# - ReSharper 错误?不正确的 "expression is always true",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5562655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com