【问题标题】:Make ReSharper/Roslyn/Compiler recognize JsonRequiredAttribute让 ReSharper/Roslyn/Compiler 识别 JsonRequiredAttribute
【发布时间】:2020-03-07 06:59:04
【问题描述】:

有时,当您创建 DTO 以反序列化 json 时,您使用 [JsonRequiredAttribute] 装饰属性:

class Car
{
    [JsonRequired]
    public string Make { get; set; }
}

但是,当您在使用 ReSharper 或 C# 8 时执行此操作时,您会看到以下警告:

Car.cs(30, 19):[CS8618] 不可为空的属性“Make”未初始化。考虑将属性声明为可为空。

在某些项目中,我有很多这样的警告,我想知道是否有一种方法可以仅针对误报来抑制它们?我可以完全禁用它们,但我不想这样做。

【问题讨论】:

  • 你能把 Make 初始化为一个空字符串吗?
  • 下一行使用一次应该可以to disable specific warning,不确定是否出错,试试CS8618?
  • 你可以尝试用[NotNull]属性来装饰属性或者用空字符串初始化
  • @MichaelLiu 这看起来像一个属性有一个默认值。它适用于其中一些人,但在许多情况下,我无法提供合理的价值。我不确定那个解决方案。它不仅仅是一个字符串,可以有字典、列表、各种东西,也可以是接口或其他抽象类型。
  • 实际上,这不是更清晰的警告,您可以禁用normally,但这比解决问题更有效。

标签: c# json.net resharper roslyn-code-analysis c#-8.0


【解决方案1】:

如果您使用的是 C# 8,则可以使用 Null Forgiving Operator。例如,

public string Make { get; set; } = null!;

来自文档

后缀!运算符没有运行时影响 - 它计算为 底层表达式的结果。它的唯一作用是改变 表达式的 null 状态,并限制对其使用给出的警告。

【讨论】:

  • 我已经用我的TryDoSomething 方法进行了尝试,这对于out T value 参数也很有用,因为编译器还会警告可能的空分配。或者只是在空实现中返回 default!
猜你喜欢
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 2019-03-22
  • 2011-07-14
相关资源
最近更新 更多