也许我的Google-Fu让我失望了,但是我无法确定在.NET中比较一个可空的内容是否总是比其他内容少.
我有一些类似的代码
MyClass findLatest(List<MyClass> items){
DateTime? latest_tstamp = null;
MyClass latest_item = null;
foreach(var item in items){
if (latest_tstamp < item.tstamp){
latest_tstamp = item.tstamp;
latest_item = item;
}
}
return latest_item;
}
Run Code Online (Sandbox Code Playgroud)
它似乎适用于我尝试的几个有限的案例(当然也item.tstamp被宣布DateTime? tstamp).
这是保证的行为吗?
根据答案(以及Jon Skeet的[另一个问题的答案]),我已经进行了以下检查:
if (item.tstamp != null &&
(latest_tstamp == null || latest_tstamp < item.tstamp)){
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
Cod*_*aos 20
这是C#规范保证的行为.可以为<null的值类型的结果是,false如果它们中的任何一个是null.另一方面,引用类型可能表现出不同的行为.
我仍然不建议使用它.很难理解这段代码.我更喜欢显式null检查,或者只是一个布尔标志,isFirstElement而不是首先使用可空的.
7.2.7提升运营商
提升的运算符允许在非可空值类型上运行的预定义和用户定义的运算符也可以与这些类型的可空形式一起使用.提升运算符由满足特定要求的预定义和用户定义的运算符构成,如下所述:
...
- 对于关系运算
<><=>=
符,如果操作数类型既是非可空值类型又是结果类型,则存在提升形式的运算符bool.通过向?每个操作数类型添加单个修饰符来构造提升形式.如果一个或两个操作数都是,则提升的运算符产生值.falsenull否则,提升的运算符会解包操作数并应用基础运算符来生成bool结果.
(引自C#语言规范版本3.0)
| 归档时间: |
|
| 查看次数: |
3376 次 |
| 最近记录: |