gpt4 book ai didi

c# - 为什么 Visual Studio 和 Resharper 无法识别这种死代码?

转载 作者:行者123 更新时间:2023-11-30 18:58:59 25 4
gpt4 key购买 nike

在我进行本周的第一篇汇编的途中发生了一件有趣的事情。我遇到了这行代码:

if (SetFetchTab)
tabMain.SelectedIndex = 1;

...然后决定,好吧,我将把它变成一个 const 以使其更具可读性,并在我使用它时将它括在大括号中,以防以后需要向此条件添加其他代码:

const int FETCH_TAB = 0;
const int CONNECTION_TAB = 1;
. . .
if (SetFetchTab)
{
tabMain.SelectedIndex = CONNECTION_TAB;
}

但后来好奇心控制住了我,我决定找出 SetFetchTab 在哪里被赋予了一个值......它不是——除了在声明它的地方隐式赋值 false/0:

public static bool SetFetchTab;

有一次,另一种形式有条件地将 SetFetchTab 设置为 0 或 1,但该代码现在被注释掉了。所以,上面的条件永远不会成立,SelectedIndex 永远不会被分配 CONNECTION_TAB/1。所以,为什么这个 block 没有灰化,表示它是死代码?

顺便说一句,FETCH_TAB 灰色化/识别为无效声明,因为 tabMain.SelectedIndex 从未分配为 0,因此我无处可使用它。

最佳答案

由于 SetFetchTab 是一个公共(public)字段,而不是一个变量,它可以被外部代码更改 - 直接来自未知的库或通过反射。

如果它是方法中的一个变量,那么它不能被任何外部代码更改,因此 Resharper 可以得出代码已死的结论。

关于c# - 为什么 Visual Studio 和 Resharper 无法识别这种死代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16019210/

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