请解释为什么这个测试通过?
[Test]
public void TestNullOps()
{
Assert.That(10 / null, Is.Null);
Assert.That(10 * null, Is.Null);
Assert.That(10 + null, Is.Null);
Assert.That(10 - null, Is.Null);
Assert.That(10 % null, Is.Null);
Assert.That(null / 10, Is.Null);
Assert.That(null * 10, Is.Null);
Assert.That(null + 10, Is.Null);
Assert.That(null - 10, Is.Null);
Assert.That(null % 10, Is.Null);
int zero = 0;
Assert.That(null / zero, Is.Null);
}
Run Code Online (Sandbox Code Playgroud)
我不明白这个代码是如何编译的.
看起来每个带有null返回的数学表达式Nullable<T>(例如10 / null是a Nullable<int>).但是我没有在Nullable<T>课堂上看到操作员方法.如果取消这些运算符int,为什么最后的断言不会失败?
And*_*rei 40
来自MSDN:
预定义的一元和二元运算符以及值类型存在的任何用户定义的运算符也可以由可空类型使用.如果操作数为null,则这些运算符产生空值; 否则,运算符使用包含的值来计算结果.
这就是所有测试都通过的原因,包括最后一个 - 无论操作数值是多少,如果是另一个操作数null,那么结果就是null.
Mar*_*ell 16
运营商Nullable<T>是所谓的"提升"运营商]; c#编译器获取可用的运算符T并应用一组预定义的规则; 例如,与+,被提升的+是null如果操作数是零,所述内值的其他的总和.最后一个; 再次,除法被定义为null两个操作数都是null- 它从不执行除法.
| 归档时间: |
|
| 查看次数: |
16854 次 |
| 最近记录: |