【问题标题】:C# what is the exclamation point positioned after the parameter nameC#参数名称后面的感叹号是什么
【发布时间】:2021-04-09 15:31:21
【问题描述】:

这是我在这里的第一个问题。我在 C# 中遇到了这样的方法:

void Do(string action!) { ... }

不要知道action 之后的! 是什么,它确实如此。你能帮我理解一下吗?

【问题讨论】:

  • 可能不是重复的 - 这是在参数列表中使用运算符,这似乎是一种新的语言功能。
  • @mtone 啊,我的错。那我再打开看看。
  • 这段代码还不能编译,因为this feature还没有实现

标签: c# c#-9.0


【解决方案1】:

这被命名为 bang 运算符 !,它可以定位在参数列表中的任何标识符之后,这将导致 C# 编译器为该参数发出标准的空检查代码。例如:

void Do(string action!) { ... }

会被翻译成:

void Do(string action!) {
    if (action is null) {
        throw new ArgumentNullException(nameof(action));
    }
    ...
}

顺便说一句,目前此功能尚不可用。您可以找到更多信息here

【讨论】:

  • This feature 尚未实现
  • 我不能用这个?我什么时候可以?
  • 还没有,这只是编写更少代码的问题,没有它你也可以生存:)
【解决方案2】:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-forgiving

您使用 null-forgiving 运算符声明引用类型的表达式 x 不为 null

【讨论】:

  • 这在 OP 给出的示例中是非法的(在参数上)。
猜你喜欢
  • 2018-01-05
  • 2019-09-16
  • 1970-01-01
  • 2011-09-09
  • 2011-12-22
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多