34

我想知道代码??中的符号。C#它是干什么用的?我该如何使用它?

怎么样int??它是一个可为空的 int 吗?

也可以看看:

?? 空合并运算符 —> 合并是什么意思?

4

12 回答 12

52

它是空合并运算符。它是在 C# 2 中引入的。

表达式的结果a ?? ba如果它不为空,b否则。b除非需要,否则不会评估。

两件好事:

  • 表达式的整体类型是第二个操作数的类型,这在您使用可空值类型时很重要:

    int? maybe = ...;
    int definitely = maybe ?? 10;
    

    (请注意,您不能使用不可为空的值类型作为第一个操作数 - 这将毫无意义。)

  • 关联性规则意味着您可以非常轻松地将其链接起来。例如:

    string address = shippingAddress ?? billingAddress ?? contactAddress;
    

这将使用发货、账单或联系地址中的第一个非空值。

于 2009-11-19T08:14:05.187 回答
35

它被称为“空合并运算符”,其工作原理如下:

而不是这样做:

int? number = null;
int result = number == null ? 0 : number;

你现在可以这样做:

int result = number ?? 0;
于 2009-05-05T23:57:36.707 回答
12

那是合并运算符。它本质上是以下内容的简写

x ?? new Student();
x != null ? x : new Student();

运营商的 MSDN 文档

于 2009-05-05T23:56:51.280 回答
8

这是新的 Null Coalesce 运算符。

这 ??运算符如果不为空则返回左操作数,否则返回右操作数。

你可以在这里阅读:http: //msdn.microsoft.com/en-us/library/ms173224 (VS.80).aspx

于 2009-05-05T23:57:09.220 回答
8

这是一个快捷方式:

Text = (category == null ? "Home" : category);
于 2009-11-19T08:13:44.093 回答
7

它是合并运算符。如果第一个值为空,它将返回另一个值

string value1 = null;
string value2 = "other";

string value3 = value1 ?? value2; // assigns "other" to value 3
于 2009-05-05T23:56:51.920 回答
5

它检查类别是否为空——在这种情况下,空值被“Home”替换。

于 2009-11-19T08:09:29.110 回答
4

我最喜欢 null 合并运算符的用途之一是避免在我的代码中使用 if 语句(我认为 if 语句很丑陋,而且大多数时候只会把事情弄得一团糟)。例如,以一个典型的场景为例,如果可用,人们可能会选择从缓存中加载某些内容,否则从数据库加载并填充缓存。

private SomeData GetData() {
    var data = HttpRuntime.Cache.Get("key") as SomeData;

    if (data == null) {
        data = DAL.GetData(some parameters...);
        HttpRuntime.Cache.Add("key", data, ....);
    }

    return data;
}

对我来说,那是丑陋的代码。我可能有点肛门,但为什么不将它重构为这个呢?

private SomeData GetDataAndCache() {
    var data = DAL.GetData(some parameters...);
    HttpRuntime.Cache.Add("key", data, ....);
    return data;
}

private SomeData GetData() {
    var data = HttpRuntime.Cache.Get("key") as SomeData;
    return data ?? GetDataAndCache();
}

IMO,它更接近 SRP,并且更清晰、更易于阅读。这些功能每个都执行一个清晰可识别的功能。

于 2009-05-06T00:25:55.437 回答
4

如果 category 为 null,Text 将变为“Home”

于 2009-11-19T08:09:18.627 回答
2

?? 空合并运算符

诠释?是一个可为空的 int,这意味着它可以具有普通 int 和 null 的值。阅读本文了解详情。

于 2009-05-05T23:57:20.217 回答
2

返回第一个非空值。便利。

于 2009-05-05T23:57:51.497 回答
1

这就是空合并运算符。它与可为空的类型一起使用(除此之外,抱歉 :)

于 2009-05-05T23:57:38.093 回答