什么是“??”运算符?
我想知道??
在C#
代码中签名。 这是为了什么? 我该如何使用它?
那么int?
? 这是一个可空的int吗?
也可以看看:
?? 空合并运算符 – >合并意味着什么?
它被称为“空合并运算符”,其工作原理如下:
而不是做:
int? number = null; int result = number == null ? 0 : number;
你现在可以做:
int result = number ?? 0;
这是空合并运算符 。 它是在C#2中引入的。
expression式的结果 a ?? b
是a
如果不是null,否则b
。 b
除非需要,否则不予评估。
两件好事:
-
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 (除其他外,对不起:)