【问题标题】:Postfix ! (exclamation) operator in C# [duplicate]后缀! C#中的(感叹号)运算符[重复]
【发布时间】:2019-09-02 11:05:06
【问题描述】:

最后一天我在 GitHub 上探索 .NET 源代码时偶然发现了以下构造:((SomeTypeToCast)variable!).SomeMethodToCall()

请注意后缀 ! 最初列出的 here

那么,简单的问题:这是什么?

P.S.:我个人对这件事的含义有几个猜测:有点“这个值永远不会为空”。但是,C# 中没有这样的运算符(至少公开可用),并且当我自己在测试项目中尝试时,这样的表达式无法编译。

【问题讨论】:

    标签: c#


    【解决方案1】:

    这是 C# 8 中的 null-forgiving 运算符(也称为“damn-it”运算符),它有效地告诉编译器假定该值将是非空的。它有点像强制转换,告诉编译器你比它更了解 - 但它在执行时有 no 效果,因此你有效地绕过了编译器检查的安全性。

    它是作为C# 8 nullable-reference type feature 的一部分引入的。它在 .NET Core 3.0 SDK 的公共预览版本中可用。

    我的经验中的典型用途:

    • 测试您的参数验证代码,以证明如果您确实将 null 传递给一个方法,您就可以验证抛出 ArgumentNullException
    • 由于编译器不知道的其他不变量,您确定值不会为空的地方。 (例如,在 Noda Time 中,我有一个 ParseResult<T>,其中包含一个值和一个异常提供程序的字段。异常提供程序为 null 或值为 null,但绝不是两者,我总是在使用之前检查异常提供程序价值。)

    【讨论】:

      猜你喜欢
      • 2012-01-27
      • 2017-03-14
      • 2021-11-02
      • 2017-10-08
      • 2020-01-14
      • 2013-07-05
      • 2013-02-19
      • 1970-01-01
      相关资源
      最近更新 更多