为什么没有给这个未使用的变量发出警告?

Erg*_*wun 14 c# warnings monodevelop visual-studio

在VS2010,VS2008或Windows上的MonoDevelop中编译以下程序时,我收到警告CS0219,"已分配变量'y',但从未使用过它的值".

namespace Problem
{
    public class Program
    {        
        private static void Main(string[] args)
        {
            object x = new object();
            int y = 0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么x在Visual Studio中编译时没有警告?

有趣的是,我得到了CS0219警告x ,并 y在Mac OS X中的MonoDevelop编译时

Erg*_*wun 22

事实证明,当赋值操作的右侧不是编译时常量时,将禁止此警告.

微软Visual Studio反馈网站上一篇自那时删除的文章解释说,这是因为他们有很多投诉来自纯粹分配变量的人,所以他们可以看到调试期间返回的方法调用,并发现警告令人恼火:

在这种情况下,对"已分配但从未使用过"的警告的抑制是出于执行此操作的用户的反馈:

int Blah(){
    // blah
    BlahBlah(x, y, z)
    // blah
    // blah
}
Run Code Online (Sandbox Code Playgroud)

"嘿,"用户在调试时说,"我不知道BlahBlah会回来什么?" 但是没有简单的方法来检查调试器中的返回值,因此用户经常这样做:

int Blah()
{
    // blah
    int temp = BlahBlah(x, y, z)
    // blah
    // blah
}
Run Code Online (Sandbox Code Playgroud)

然后使用locals或watch窗口来检查temp.temp永远不会在函数中的任何其他地方使用,因此会产生令人恼火的"已分配但未读取"警告.

我认为这有点遗憾:

  1. 我实际上发现这些警告在MonoDevelop中给出时很有帮助.
  2. 任何人都可以自己压制警告(诚然,他们也会压制未使用的编译时常量分配 - 可能应该有一个单独的警告?).

无论如何,我明白你不能取悦所有人.

  • 有什么办法可以重新开启警告吗? (5认同)
  • 既然您可以[在visual studio调试器中查看返回值](https://msdn.microsoft.com/en-us/library/dn323257.aspx),是否还有理由禁用此警告? (3认同)
  • 我来到这里询问是否有人知道如何重新启动警告...这是因为开发人员正在启动变量而且不使用它们(重量级,我的意思是实例化一个类,当没有必要时会做很多事情) (3认同)
  • “不管怎样,我明白你不可能让所有人都满意。” 这不像存在用户可以设置的选项 ́\\_(ツ)_/̊ (2认同)