gpt4 book ai didi

c# - 如何避免不相关的可空警告(没有显式抑制)

转载 作者:行者123 更新时间:2023-12-03 09:57:01 25 4
gpt4 key购买 nike

有没有办法让分析器理解变量 Bar对以下情况有值(value)吗?

#nullable enable 
class Foo {
bool GenerateArray => Bar.HasValue;
int? Bar { get; set; }
void FooBar() {
var data = (GenerateArray) ? new int[Bar.Value] : null;
}
}
有警告“可空值类型可能为空”。为 Bar.Value但显然不可能。
我知道有两种方法可以避免警告。两者都有缺点:
  • 使用 Bar.HasValue直接代替属性 GenerateArray .但是使用 GenerateArray提高可读性。
  • 使用 Bar!.Value而不是 Bar.Value .但是,如果有人更改了代码,例如,使 GenerateArray future 的自动属性,警告可能会再次变得相关,但不会出现。

  • 这里的问题与 this question略有不同,其中使用局部变量而不是属性。如果我理解正确的话,下面接受的答案适用于属性(只要 C# 9 发布),但不适用于局部变量。因此,这个问题不是重复的。

    最佳答案

    MemberNotNullWhen就可以了C# 9 中的属性(目前为预览版):

    [MemberNotNullWhen(true, "Bar")]
    bool GenerateArray => Bar.HasValue;
    .Net 5 中将存在相关的属性类型:
    namespace System.Diagnostics.CodeAnalysis
    {
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
    public sealed class MemberNotNullAttribute : Attribute
    {
    public MemberNotNullAttribute(params string[] members) { }
    public MemberNotNullAttribute(string member) { }
    }
    }

    namespace System.Diagnostics.CodeAnalysis
    {
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
    public sealed class MemberNotNullWhenAttribute : Attribute
    {
    public MemberNotNullWhenAttribute(bool when, params string[] members) { }
    public MemberNotNullWhenAttribute(bool when, string member) { }
    }
    }
    Illustration on sharplab

    关于c# - 如何避免不相关的可空警告(没有显式抑制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62676807/

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