【问题标题】:Possible null reference argument for parameter参数的可能空引用参数
【发布时间】:2022-01-20 14:41:50
【问题描述】:

我目前使用的是 Visual Studio 2022,下面是我的代码。

for (int i = 0; i < list.Count; i++)
        {
            if (list[i].TenantDetails != null)
                dtEntity = DataTableManager.ConvertData(list[i].TenantDetails);
        }

public static DataTable ConvertData(byte[] data) { ... }

收到以下警告。 警告 CS8604 'DataTable DataTableManager.ConvertData(byte[] data)' 中参数 'data' 的可能空引用参数

如何避免这个警告?将我的旧项目从 VS 2019 转换为 2022 后,我收到了很多代码警告。

【问题讨论】:

  • 您可能启用了可空引用,这意味着您必须格外小心。 确切准确.TenantDetails成员的类型?
  • 公共部分类租户{公共字节[]?租户详情 { 获取;放;如果我删除“?”在 byte[] 中,它给出了另一个警告 - 警告 CS8618 Non-nullable property 'TenantDetails' must contain a non-null value when exiting constructor.考虑将属性声明为可为空。
  • 所以你说TenantDetailsbyte[]?,末尾的问号表示属性可能null。然而,ConvertData 接受byte[],没有问号。我知道你有 if 语句,但编译器总是不够聪明,所以你可能必须在参数后使用!,或者你可以使用var details = list[i].TenantDetails;,然后在 if 语句和参数中使用它,然后编译器会看到它保证是相同的值。
  • 我猜它不知道阅读list[i] 确实会绊倒它。
  • 我确信我会在初始化对象时为下面的属性赋值。公共字节[]?租户详情 { 获取;放;但是有没有办法删除“?”并摆脱警告 CS8618 Non-nullable property 'TenantDetails' must contain a non-null value when exiting constructor

标签: .net asp.net-core .net-core visual-studio-2022


【解决方案1】:

有没有办法去掉“?”并摆脱警告 CS8618 Non-nullable property 'TenantDetails' must contain a non-null value when exiting constructor

您可以尝试为TenantDetails设置默认值。

public byte[] TenantDetails { get; set; } =new byte[0];

你可以试试看TenantDetails.Length:

for (int i = 0; i < list.Count; i++)
        {
            if (list[i].TenantDetails.Length>0)
                dtEntity = DataTableManager.ConvertData(list[i].TenantDetails);
        }

【讨论】:

    【解决方案2】:

    我找到了一种使用 .editorconfig 文件消除这些警告的方法。

    将光标移至警告位置以查看可能的解决方案,有两个选项:“源上抑制”或以下选项,类似于解决方案中的抑制。单击那个,将为您创建一个 .editor 配置文件,警告将消失。

    【讨论】:

      猜你喜欢
      • 2022-11-10
      • 2018-07-26
      • 1970-01-01
      • 2017-12-16
      • 2015-12-22
      • 1970-01-01
      • 2022-10-14
      • 2016-03-16
      • 1970-01-01
      相关资源
      最近更新 更多