什么是“??”运算符?

我想知道??C#代码中签名。 这是为了什么? 我该如何使用它?

那么int? ? 这是一个可空的int吗?

也可以看看:

?? 空合并运算符 – >合并意味着什么?

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

而不是做:

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

你现在可以做:

 int result = number ?? 0; 

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

expression式的结果 a ?? ba如果不是null,否则bb除非需要,否则不予评估。

两件好事:

  • expression式的整体types是第二个操作数的types,当使用可为空的值types时,这是非常重要的:

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

    (请注意,您不能使用不可为空的值types作为第一个操作数 – 这是毫无意义的。)

  • 关联规则意味着你可以很容易地链接。 例如:

     string address = shippingAddress ?? billingAddress ?? contactAddress; 

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

这是合并操作员。 它基本上是以下的简写

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

有关运营商的MSDN文档

这是新的Null Coalesce运算符。

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

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

这是一个捷径:

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

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

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

它检查类是否为空 – 当这种情况下空值被replace为“Home”。

对于空合并运算符,我最喜欢的用法之一是避免if语句在我的代码中(我认为如果语句是丑陋的,只是大部分时间混乱)。 例如,采取一个典型的场景,如果可能的话,可以select从caching加载某些内容,否则从数据库加载并填充caching。

 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,更清洁,更易于阅读,国际海事组织。 这些function分别执行一个明确可识别的function。

如果类别为空,则文本将成为“主页”

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

?? 空合并运算符

诠释? 是一个可为空的int,这意味着它可以具有正常的int和null的值。 阅读这个细节。

这是空合并运算符 。 它用于可空types (除其他外,对不起:)