C# 参数名后面的感叹号是什么

Ale*_*iat 8 c# c#-9.0

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

void Do(string action!) { ... }
Run Code Online (Sandbox Code Playgroud)

不要明白!后面action是什么,它确实如此。你能帮我理解一下吗?

Maj*_*vin 11

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

void Do(string action!) { ... }
Run Code Online (Sandbox Code Playgroud)

将被翻译成:

void Do(string action!) {
    if (action is null) {
        throw new ArgumentNullException(nameof(action));
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

  • [此功能](https://github.com/dotnet/csharplang/issues/2145) 尚未实现 (2认同)