【问题标题】:How to mark a NonNullable reference property as safe? [duplicate]如何将 NonNullable 引用属性标记为安全? [复制]
【发布时间】:2019-02-20 09:30:46
【问题描述】:

我有一个在我的 EntityFramework 模型中使用的实体。

public class Entity
{
    public int Id { get; set; }

    public string Value { get; set; }
}

启用可空引用类型后编译器给我一个警告:

Warning CS8618  Non-nullable property 'Value' is uninitialized.

我知道这个属性在数据库中是不可为空的并且它是安全的。

除了用#pragma warning disable禁用类中的警告之外,还有什么方法可以将此属性标记为安全?

我的第一反应是尝试像这样使用! 将类型标记为安全

public string! Value { get; set; }

但这没有用。

【问题讨论】:

  • 注意警告。没有人说这家酒店是安全的。警告告诉您变量 not 已初始化,因此为 null。即使数据库中的 字段 不可为空,查询也可能返回 NULL。右侧表中没有匹配记录的 LEFT JOIN 的结果将包含所有缺失值的 NULL
  • @PanagiotisKanavos 你说得对,这比我想象的要复杂
  • 您是否可以通过提供默认值来缓解这种情况(我想这取决于空字符串在您的情况下是否是合法值)? public string Value { get; set; } = string.Empty;

标签: c# c#-8.0 nullable-reference-types


【解决方案1】:

请参阅answer 我的类似问题。如果您通过某些业务规则确保不可为空(在我的情况下是验证),最好通过使用不可为空的属性告诉您的类的消费者某些属性永远不会为空,并使用此构造处理编译器警告.

public class Entity
{
   public int Id { get; set; } = null!;
   public string Value { get; set; } = null!;
}

【讨论】:

  • 不要发布重复的答案,这就是关闭问题的目的。
【解决方案2】:

你走对了。

公共字符串?价值{得到;放; }

【讨论】:

  • 但是类型不能为空,总是有值
  • 安全
猜你喜欢
  • 1970-01-01
  • 2020-09-01
  • 2012-03-18
  • 2017-06-05
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
相关资源
最近更新 更多