我想知道代码??
中的符号。C#
它是干什么用的?我该如何使用它?
怎么样int?
?它是一个可为空的 int 吗?
它是空合并运算符。它是在 C# 2 中引入的。
表达式的结果a ?? b
是a
如果它不为空,b
否则。b
除非需要,否则不会评估。
两件好事:
表达式的整体类型是第二个操作数的类型,这在您使用可空值类型时很重要:
int? maybe = ...;
int definitely = maybe ?? 10;
(请注意,您不能使用不可为空的值类型作为第一个操作数 - 这将毫无意义。)
关联性规则意味着您可以非常轻松地将其链接起来。例如:
string address = shippingAddress ?? billingAddress ?? contactAddress;
这将使用发货、账单或联系地址中的第一个非空值。
它被称为“空合并运算符”,其工作原理如下:
而不是这样做:
int? number = null;
int result = number == null ? 0 : number;
你现在可以这样做:
int result = number ?? 0;
那是合并运算符。它本质上是以下内容的简写
x ?? new Student();
x != null ? x : new Student();
运营商的 MSDN 文档
这是新的 Null Coalesce 运算符。
这 ??运算符如果不为空则返回左操作数,否则返回右操作数。
你可以在这里阅读: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
它检查类别是否为空——在这种情况下,空值被“Home”替换。
我最喜欢 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,并且更清晰、更易于阅读。这些功能每个都执行一个清晰可识别的功能。
如果 category 为 null,Text 将变为“Home”
返回第一个非空值。便利。