解决编译错误“CS8601可能的空引用分配”

Eri*_*let 13 c# parameters default nullable compiler-errors

从 C# 8.0 开始,默认情况下标准是不可为 null 的变量。参考1

但对于像这样的泛型:

    public static T PerfomIO<T>(Func<T> function, T defaultValue = default)
    {
        try
        {
            return function();
        }
        catch (IOException)
        {
        }

        return defaultValue;
    }
Run Code Online (Sandbox Code Playgroud)

如何摆脱当我尝试传递“default”时出现的编译错误“CS8601可能的空引用分配”?

我想在这里支持空值。我不想禁用错误消息。我想按照应有的方式对其进行编程。

我尝试以多种方式添加 Nullable 但没有成功。我尝试 [AllowNull] 但没有成功

在此输入图像描述

Eri*_*let 18

我发现了一些技巧,尽管我不知道为什么该项目被迫“可空检查”(找到并详细信息如下)。我查看了 .csproj、.sln 和其他地方,没有找到任何可以强制进行空检查的参数。

我找到了两种方法来解决我遇到的问题:

  • 解决方案 1:您可以在 .cs 文件的开头添加下一行:

    #可空禁用

  • 解决方案 2:将参数从 更改为default告诉default!编译!器不要考虑可为空检查的位置。

我目前使用default!.

另外仅供参考,如果您的项目强制进行 null 检查,但您在项目或解决方案中找不到该选项,那么请查找这篇文章:自定义您的构建,也许您会找到为什么强制进行 null 检查。(自 2019 年以来都是新的)。