繁体   English   中英

如何检查不可为空的对象是否不为空?

[英]How to check if non-nullable object is not null?

我需要编写验证方法来验证非可空/可空对象是否有效。

例如:

public void Example()
{
    object obj = null; //Can't be null.
    object? obj2 = null; //Can be null.
    object obj3 = new(); //Can't be null.
    object? obj4 = new(); //Can be null.

    var objIsValid = ObjIsValid(obj); //false
    var obj2IsValid = ObjIsValid(obj2); //true
    var obj3IsValid = ObjIsValid(obj3); //true
    var obj4IsValid = ObjIsValid(obj4); //true
}

如何制作这样的方法?

public bool ObjIsValid(object obj)
{
     if(!obj.MarkedWithQuestionMark(obj) && obj is null) 
          return false;
     return true;
}

你简单地写它是这样的:

public bool ObjIsValid(object obj) => obj is not null;

换句话说,我根本不会考虑原始类型是否可以为空。 Nullalbe 引用类型是静态分析的一项功能。 在运行时,没有什么可以阻止未定义为可空引用的变量包含null (另请参阅Q&A)。

只是不值得努力检查某些东西是否可以为空,然后才检查它。 只需检查一下,就可以完成了。

此外,即使你真的想写一个MarkedWithQuestionMark(object obj)函数,关键是你不能。 无法检查变量是否被注释为可为空的引用类型。 此信息仅在编译期间可用。 IL 中没有任何元信息可以在这里提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM