我想知道??
代码中的C#
个符号。它是为了什么?我该如何使用它?
int?
怎么样?它是一个可以为空的int吗?
答案 0 :(得分:51)
这是null coalescing operator。它是在C#2中引入的。
如果表达式a ?? b
不为空,则表达式a
为b
,否则为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)
INT?是一个可以为null的int,这意味着它可以具有普通int和null的值。 请阅读this了解详情。
答案 10 :(得分:2)
返回第一个非空值。方便。
答案 11 :(得分:1)
那是null-coalescing operator 。它与nullable types一起使用(除此之外,抱歉:)