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

C# what is the exclamation point positioned after the parameter name

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

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

并且不明白 action 之后的 ! 是什么,它确实是什么。你能帮我理解一下吗?

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

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

将翻译成:

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

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

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

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