【问题标题】:Public field in private class: "Field [FieldName] is never assigned to, and will always have its default value null"私有类中的公共字段:“字段 [FieldName] 从未分配给,并且始终具有其默认值 null”
【发布时间】:2012-09-06 00:12:27
【问题描述】:

我有一个看起来像这样的私有类:

private class PocoUserWithResourceId
{
    public USER User;
    public string ResourceId;
}

我用这个类做事(在同一个封装的公共类中),比如:

var uQuery = from u in db.USERS.All()
select new PocoUserWithResourceId {User = u, ResourceId = arv.Resource_Id};

我收到了警告:

字段“PocoUserWithResourceId.ResourceId”从未分配给,并且 将始终具有其默认值 null

我错过了什么?我在我的 LINQ to SQL 代码中分配值。

【问题讨论】:

  • 在你的情况下,忽略警告是安全的。
  • 是否只是因为我在声明期间分配了属性值,编译器没有看到我正在使用它们的事实?
  • 编译器用于生成警告的逻辑与最近添加到 C# 语言的语法并不完全一致。
  • @Dave,OP 利用什么(新)语法会导致这个问题?
  • 您可以通过为您的类创建一个接受用户和资源 ID 并仅设置公共属性的构造函数来消除警告。

标签: c# linq-to-sql null compiler-warnings default-value


【解决方案1】:

仅仅是因为我在 声明编译器没有看到我正在使用的事实 他们?

不,那只是因为您分配的是 field 值,而不是 property 值...

您可以在 2 种良好做法之间进行选择:
- 使用构造函数
- 使用访问器(属性)

【讨论】:

    【解决方案2】:

    您可以使用#pragma 暂时禁用特定情况的警告

    // turn it off
    #pragma warning disable 0649
    private class Foo
    {
       public string FieldName
    }
    // turn it back on
    #pragma warning restore 0649
    

    要找出错误编号是什么,请检查原始输出或右键单击警告并选择显示错误帮助。即使页面本身与警告无关,您也会发现隐藏在 URL (CS0649) 中的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多