[英]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.