gpt4 book ai didi

c# - 如何抑制可能的空引用警告

转载 作者:行者123 更新时间:2023-12-03 21:57:11 26 4
gpt4 key购买 nike

我正在使用 c# 8 中的可空类型,但我发现了一个困扰我的问题。
假设我有一个采用可为空参数的方法。当参数为空时,我想抛出一个特定的异常。但我希望该方法干净并在其他地方检查参数。 check方法抛出异常,所以方法后面的参数不能为空。
不幸的是,编译器没有看到这一点,并向我发出警告。
这是方法:

    public void Foo(string? argument)
{
GuardAgainst.Null(argument, nameof(argument));
string variable = argument; // <-- Warning CS8600 Converting null literal or possible null value to non - nullable type
var length = argument.Length; //<--Warning CS8602 Dereference of a possibly null reference
}

检查方法如下:
    public static void Null(string? text, string paramName)
{
if (text == null)
throw new ArgumentNullException(paramName);
}

现在,我可以抑制这样的警告:
#pragma warning disable CS8602
var length = argument.Length;
#pragma warning restore CS8602

但这有点扼杀了我保持代码干净的意图。
所以我的问题是:有没有更好的方法来抑制警告?或者告诉编译器从现在开始参数保证不为空?

最佳答案

这做你想要的:

public static void Null([NotNull] string? text, string paramName)
{
if (text == null)
throw new ArgumentNullException(paramName);
}
[NotNull]属性指示分析,调用此方法后, text不会 null .

这意味着您不需要 !运算符,它更干净、更自然。

void M(string? argument)
{
GuardAgainst.Null(argument, nameof(argument));
string variable = argument; // no warning
// ...
}

想想 ?运算符意味着两件事:1) 调用前值可以为空,2) 调用后值可以为空。另一种写法是 [AllowNull, MaybeNull] .缺席 ?在可空上下文中同样意味着 [DisallowNull, NotNull] .如果您的 Null方法,我们最终得到 [AllowNull, NotNull]由于 NotNull的手册规范.

关于c# - 如何抑制可能的空引用警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61384377/

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