C# 在参数名称后面加感叹号代表什么意思?

8

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

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

我不明白在action后面的!是什么意思以及它的作用。你能帮我理解吗?


2
可能不是重复 - 这是在参数列表中使用运算符的语言新特性。 - mtone
@mtone 噢,我的错。我会重新打开它的。 - ProgrammingLlama
2
这段代码目前还无法编译,因为此功能尚未实现。 - Pavel Anikhouski
2个回答

10

这被称为感叹号操作符!,可以放置在参数列表中的任何标识符之后,这将导致C#编译器为该参数发出标准的空检查代码。例如:

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

Will be translated into:

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

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


2
这个功能尚未实现。 - Pavel Anikhouski
我不能使用这个?那么什么时候可以呢? - Alex Gobiat
还没有,只需要写更少的代码,你就可以在没有它的情况下生存 :) - Majid Parvin

3

在 OP 给出的示例中,这是非法的(针对参数)。 - Yair Halberstadt
@YairHalberstadt 在撰写本文时,链接的文章解释了两种情况——一种等同于 OP 所要求的情况,另一种是当您知道表达式不可能为空时,例如(摘自链接):null!p!.Name - gimlichael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接