C# C警告:变量已分配但从未使用

C# C警告:变量已分配但从未使用,c#,warnings,C#,Warnings,我在代码中的很多地方都看到了这个警告,因为我一直在使用一个特定的范例。在objectA中,我创建了objectB,objectB自己做了很多必要的工作,但没有在其他地方引用 我看到这个问题的唯一答案是: 抑制警告 你做错了什么。 我在很多地方做的例子 class A { B b; public A() { b = new B(); } } class B { public B() { Updater.RegisterForSu

我在代码中的很多地方都看到了这个警告,因为我一直在使用一个特定的范例。在objectA中,我创建了objectB,objectB自己做了很多必要的工作,但没有在其他地方引用

我看到这个问题的唯一答案是:

抑制警告 你做错了什么。 我在很多地方做的例子

class A {
    B b;
    public A() { 
        b = new B(); 
    }
}

class B {
    public B() {
        Updater.RegisterForSuperImportantUpdates(this);
    }

    public void Update() { 
        // super important stuff happening here 
        ....
    }
}

这看起来像是一个有效的设计还是有令人讨厌的气味。抑制警告会很烦人,因为这种模式将被频繁使用。

根据干净代码原则,这是一个有效的警告,你应该保持你的代码尽可能整洁,这样第二个将在你的代码中修复的人就不会与代码中使用的未使用的变量相混淆。

如果你以后不使用bB,为什么要保留对它的引用? 你不能在不保留引用的情况下新建它吗


因为它似乎被更新程序中未提及的第三个类引用,所以不应该是GCeed。

您可以使用Debug.Logb来避免该警告。哪一行在这里得到警告?b没有用吗?谁调用b上的更新?如果Updater.RegisterForSuperImportantUpdates调用它-这是一种代码味道。主要是因为您正在存储对b的引用,但您不需要这样做-而且因为构造函数应该设置对象的内部结构-它不应该有副作用您正在存储对b的引用,但您不需要这样做,所以消除警告的最简单方法是将b设为静态类,这样,就不会有未设置的引用。除非有充分的理由将一个类的多个实例用于更新,否则这一点很好。只是在没有参考资料的情况下更新东西似乎是一种坏习惯。也许这将是一个很好的解决方案。我确实担心,如果我这样做的话,我的设计可能会导致错误,比如说,如果我有B的其他子类,它们改变了构造器,而构造器将不再具有引用,从而导致它得到GCed。感谢您的回复,我将把它标记为一个解决方案,但可能需要对我的代码进行重构。