是什么 ”??”运营商?

时间:2009-05-05 23:54:30

标签: c# operators coalesce null-coalescing-operator

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

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

另见:

  

?? Null Coalescing Operator —> What does coalescing mean?

12 个答案:

答案 0 :(得分:51)

这是null coalescing operator。它是在C#2中引入的。

如果表达式a ?? b不为空,则表达式ab,否则为b。除非需要,否则不会评估int? maybe = ...; int definitely = maybe ?? 10;

两件好事:

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

    string address = shippingAddress ?? billingAddress ?? contactAddress;
    

    (请注意,您不能使用非可空值类型作为第一个操作数 - 它会是 没有意义的。)

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

    {{1}}

这将使用运费,账单或联系地址中的第一个非空值。

答案 1 :(得分:33)

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

而不是:

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

您现在可以这样做:

int result = number ?? 0;

答案 2 :(得分:12)

那是合并运营商。它基本上是以下

的简写
x ?? new Student();
x != null ? x : new Student();

运营商的MSDN文档

答案 3 :(得分:8)

这是新的Null Coalesce运算符。

??如果左侧操作数不为null,则返回左侧操作数,否则返回右侧操作数。

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

答案 4 :(得分:8)

这是一个快捷方式:

Text = (category == null ? "Home" : category);

答案 5 :(得分:7)

这是合并运营商。如果第一个值为null,它将返回另一个值

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

string value3 = value1 ?? value2; // assigns "other" to value 3

答案 6 :(得分:5)

它检查category是否为null - 在这种情况下,null值被“Home”替换。

答案 7 :(得分:4)

对于空合并运算符,我最喜欢的一个用途是避免在我的代码中使用if语句(我认为如果语句很难看,而且大多数情况下都会混乱)。例如,假设一个典型的情况,如果可用,可以选择从缓存加载某些东西,否则从db加载并填充缓存。

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();
}

它更紧密地遵循SRP,更清晰,更容易阅读,IMO。这些功能各自执行一个明确可识别的功能。

答案 8 :(得分:4)

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

答案 9 :(得分:2)

?? Null-Coalescing Operator

INT?是一个可以为null的int,这意味着它可以具有普通int和null的值。 请阅读this了解详情。

答案 10 :(得分:2)

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

答案 11 :(得分:1)

那是null-coalescing operator 。它与nullable types一起使用(除此之外,抱歉:)