什么是"??" 操作员用的?[重复]
-
05-07-2019 - |
题
这个问题已经有一个答案在这里:
- 什么两个问题标志着在一起意味着在C#? 17的答案
我想知道关于 ??
迹象 C#
代码。它是什么用的?我怎么能用它呢?
怎么样 int?
?它是一个可空int?
参见:
解决方案
这就是所谓的"null凝聚操作者",并作品像这样的东西:
而不是做:
int? number = null;
int result = number == null ? 0 : number;
你可以现在就这样做:
int result = number ?? 0;
其他提示
它是的 空结合运营商.它介绍了在C#2.
其结果的表达 a ?? b
是 a
如果这不是空的,或者 b
否则。 b
不行评价,除非它是必要的。
两个美好的东西:
总体类型的表达是第二个操作数,这是重要的,当你使用可空值的类型:
int? maybe = ...; int definitely = maybe ?? 10;
(请注意,不能使用非空值的类型作为第一个操作数的-那将是 毫无意义的。)
关联性规则意味着你可以把这真的很容易。例如:
string address = shippingAddress ?? billingAddress ?? contactAddress;
这将使第一个非null价值的运费、记帐或联系地址。
这是联合经营者。它基本上是简写为如下
x ?? new Student();
x != null ? x : new Student();
MSDN文件在操作上
这是新的空结合运营商。
??操作者返回的左手操作的,如果它不是空,否则返回的权利的操作数。
你可以在这里阅读有关: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
它检查,如果分类是空的-在这种情况下的空值替换为"家庭"。
一个我最喜欢的使用对空结合运营商是为了避免如果发言,在我的代码(我认为如果声明是丑陋的,只是混乱的事物了大部分时间)。例如,一个典型的情况,其中一个可能选择负荷的东西从高速缓冲,如果可用,否则从数据库和填充高速缓存。
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();
}
它更紧密地下资源计划和更清洁的和更易于阅读,海事组织。功能完全执行的一个可明确识别功能的每一个。
如果分类是null,文本将成为"家庭"
返回的第一个非空值。方便。