gpt4 book ai didi

c# - 我们可以在 C# 8.0 中避免使用不可为空的方法参数的空参数保护子句吗?

转载 作者:行者123 更新时间:2023-12-03 16:37:42 25 4
gpt4 key购买 nike

在 C# 8.0 中,假设我启用了可空引用 <Nullable>enable</Nullable>在 .csproj 中。当我尝试在不可为空的用法中使用可能为空的引用时,这给了我警告,这很好。然后我可以打开 <WarningsAsErrors />并将其严格执行为错误而不是警告。

所以我希望这种语言结构可以避免某些空检查代码。具体来说,我(和许多其他人)经常写这样的方法:

public string Message { get; set; }
public void SetFoo(string message) {
Message = message ?? throw new ArgumentNullException(nameof(message));
Console.WriteLine(Message.ToUpper())
}

我希望放弃空检查,因为引用是不可为空的,而是写
public string Message { get; set; }
public void SetFoo(string message) {
Message = message;
Console.WriteLine(Message.ToUpper())
}

这似乎很好,因为像 myThing.SetFoo(null); 这样的电话生成编译器警告/错误。但是,我发现诸如 myThing.SetFoo(null!); 之类的代码无论如何编译和运行!因此,为了防御性编码,无论如何我都需要保留旧的守卫条款,以防有人滥用 ! 来调用它。接线员,对吗?

有什么方法可以避免编写代码来检查不可为空的引用是否为空? 我希望有一种方法可以让编译器推断它在这种情况下应该抛出异常,而不仅仅是忽略不可为空性,但我没有看到。

最佳答案

Can we avoid null reference guard clauses with non-nullable method parameters in C# 8.0?



没有为什么:
  • 您可以通过null s 明确,使用 null! , which has its usages ,另见 this question .
  • 在没有可为空引用类型支持的情况下编译的外部代码可以调用您的代码并通过 null ,而不会在调用项目中收到警告或错误。
  • 关于c# - 我们可以在 C# 8.0 中避免使用不可为空的方法参数的空参数保护子句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59771608/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com