【问题标题】:What are best way to resolve C# unnecessary assignment (IDE0059) warnings?解决 C# 不必要的分配(IDE0059)警告的最佳方法是什么?
【发布时间】:2021-03-29 12:32:14
【问题描述】:

我经常编写为局部变量赋值但不使用该值的代码。我这样做是因为检查调试器中的值很有用(没有它我不确定如何检查变量)。但是 C# 编译器对此给出了警告。建议的潜在修复不是我想要的,我想知道可能有哪些最佳实践来处理这个问题。我尝试使用丢弃('_'),但似乎无法检查调试器中的值。抑制警告似乎不是一个好主意,因为有时我确实需要清理代码。欢迎提出建议。

例子:

        [Fact]
        public void TestDuplicateValue()
        {
            string value = "A";
            FieldValue fv1 = new FieldValue(value);
            FieldValue fv2 = new FieldValue(value);

            // Should not throw an exception
            FieldValueCollection fvc = new FieldValueCollection(new FieldValue[] { fv1, fv2 });
        }

【问题讨论】:

  • 好吧,您必须使用变量或抑制警告。不能两者兼得。
  • 当断点被击中时,您应该能够检查范围内的任何变量。
  • 或者使用变量,在调试时,您可以突出显示一个表达式,例如方法调用,然后在上下文菜单中选择“QuickWatch...”以打开一个窗口,您可以在其中检查该表达式的结果。您还可以选择“添加观察”,这会在观察窗格/窗口中为表达式添加一个条目。
  • 您在测试中没有做出任何断言。单元测试的重点是您不必检查值(通过调试)来查看它是否通过。
  • @insane_developer 离题,但该方法正在测试是否抛出异常。

标签: c# warnings


【解决方案1】:

嗯……对于没有意义的事情,真的很难回答。不过你说的有点道理。我能理解你。既然你真的不想忽略这个警告而且我明白为什么,我们必须要有创意:)

除非你忽略它,或者你真的使用它,否则真的没有办法摆脱警告信息。

但凡事都有解决办法,即使不是很好,所以我给你两个选择:

选项 1

只需注释该行并在您实际需要时取消注释

选项 2

执行以下操作。当给定条件为假时,Debug.Assert 语句像断点一样中断执行。由于您的 fvc 变量永远不会为假,因此永远不会触发该断点。但是该变量仍在使用中,并且您摆脱了警告消息。

    [Fact]
    public void TestDuplicateValue()
    {
        string value = "A";
        FieldValue fv1 = new FieldValue(value);
        FieldValue fv2 = new FieldValue(value);

        // Should not throw an exception
        FieldValueCollection fvc = new FieldValueCollection(new FieldValue[] { fv1, fv2 });
        System.Diagnostics.Debug.Assert(fvc != null);
    }

选项 3

在我考虑的时候,这里有一个奖励。您评论该行。但是当你在调试你的代码时,你可以将你的指令复制并粘贴到一个观察窗口中,并且可以得到它的值。使用 VisualStudio 菜单,调试/Windows/Watch/Watch1 - 仅在调试时可用

编辑

用评论替换取消评论并使其变为粗体

【讨论】:

  • 感谢您的回复。我喜欢选项 2(我还会添加注释,为什么我将它放在代码中)。选项 3 很有创意,但在“new FieldValueCollection(...)”具有导致其行为随每次调用而改变的副作用的情况下不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 2010-12-21
  • 2013-10-27
  • 1970-01-01
  • 2010-11-08
  • 2019-10-05
  • 1970-01-01
相关资源
最近更新 更多