最后一天,我在GitHub上探索.NET源代码,偶然发现了以下结构:((SomeTypeToCast)variable!).SomeMethodToCall()。
请注意后缀!原来在这里列出
那么,一个简单的问题:这是什么?
PS:就我个人而言,我对这件事可能意味着几个猜测:有点“此值永远不会为空”。但是,在C#中没有这样的运算符(至少是公开可用的),并且当我自己在测试项目中尝试使用该表达式时,此类表达式无法编译。
这是C#8中的允许空值的运算符(也称为“该死的”运算符),有效地告诉编译器假定该值将为非空值。在告诉编译器您比它知道的更多之前,它有点像转换(cast),但是它在执行时没有作用,因此您实际上绕过了编译器检查的安全性。
它是C#8可空引用类型功能的一部分引入。它是在一个公开预览可用版本的.NET核心3.0 SDK的。
根据我的经验,典型的用法是:
ArgumentNullExceptionParseResult<T>具有值字段和异常提供程序的字段。异常提供程序为null或值为null,但都不是两者兼有,并且我总是在使用该值之前检查异常提供程序。)