验证对象时C#编译器的空状态静态分析 NotNullAttribute

问题描述

我在项目中启用了Nullable检查,并在代码中的许多地方检查了输入对象及其属性,如果出现问题,则引发异常。但是,如果一切正常,那么我可以确定输入对象不是null。有没有办法告诉编译器,以某种方式使用NotNullWhen属性或类似的东西?我不想在代码中的任何地方禁用可空检查。

void Validate(MyClass1? obj1,MyClass2 obj2)
{
    if (obj1 == null || obj2 == null)
    {
        throw new ArgumentNullException();
    }
}

void DoSomething(MyClass1 obj1,MyClass2 obj2)
{
    // This method requires not-null objects
    ...
}

void Process(MyClass1? obj1,MyClass2 obj2)
{
    Validate(obj1,obj2);
    
    // this produces warning,requires to explicitly check if both objects are not null
    DoSomething(ob1,obj2);
}

解决方法

您可以从$ adb shell pm clear com.android.providers.contacts 命名空间使用NotNullAttribute

指定即使相应类型允许输出也不为空。指定调用返回时输入参数不为空。

$ adb shell am start -a android.intent.action.VIEW content://com.android.contacts/contacts/1

另外this文章也可能有帮助。

,

我认为[NotNull]和。 [ItemNotNull]属性是您要寻找的。请参阅文档herehere

NotNullAttribute

表明标记元素的值永远不能为空。

(示例)

[NotNull] object Foo() {
  return null; // Warning: Possible 'null' assignment
}