【问题标题】:Visual studio warning: x is never assigned toVisual Studio 警告:x 从未分配给
【发布时间】:2014-11-02 10:08:08
【问题描述】:

我有以下代码块使用?? Operator 进行初始化:

    private string _name;
    public string Name
    {
        get { return _name ?? string.Empty; }
    }

我猜这个代码是有效的,因为它可以工作,但是我在错误列表中收到以下警告:

'_name' 永远不会分配给它,并且始终具有其默认值 null

有没有办法让Visual Studio 停止对此发出警告?

【问题讨论】:

  • 在 VS 中可能有一个选项可以禁用警告,但你也可以这样做private string _name = "";
  • ?? 运算符从不初始化任何东西,您链接到的文档也没有声称它确实如此。

标签: c#


【解决方案1】:

有没有办法让 Visual Studio 停止对此发出警告?

最好的方法是理解警告并修复它所指示的错误

如果您从未分配给_name,这意味着从_name 读取将始终返回null。这真的是你想要的吗?

You can also suppress this warning.

还要注意,?? 只是从其操作数中计算出一个新值。它不会为任何东西分配新值。

【讨论】:

  • 什么错误?如果我没记错的话,这个警告有两个部分:1)'_name' is never assigned to 这是不正确的,因为不可能有不分配给它的情况。 2) and will always have its default value null 也不正确,原因与我上面提到的相同
  • 你在哪里分配它?不在显示的代码中。也许您假设?? 写入_name,因为您称其为“initialization”?事实并非如此。我应该立即理解这个词并纠正它。
  • 在您发布的代码 sn-p 中,_name 绝对不会被分配给。您的属性是一个只读属性,它返回 _name 的值,如果为 null,则返回 null。 getter 不分配任何东西。
  • @Yoav 只需在读取Name 属性后检查_name 的值,以验证?? 不会更改它。
  • +1 为此:“最好的方法是理解警告并修复它指示的错误。”。警告是有原因的。
【解决方案2】:

显式初始化_name:

 private string _name = null; 

或者

private string _name = String.Empty; 

然后你不会有任何警告......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 2013-01-23
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 2011-02-10
    相关资源
    最近更新 更多