Tag: 符operator

当==未定义时,为什么==运算符适用于Nullable ?

我只是看着这个答案 ,其中包含来自.NET Reflector的Nullable的代码,我注意到两件事: 从Nullable到T时需要显式转换。 ==运算符未定义。 鉴于这两个事实,令我惊讶的是,这编译: int? value = 10; Assert.IsTrue(value == 10); 使用代码value == 10 ,任何一个value都被神奇地转换为int (因此允许使用int的==运算符,或者为Nullable神奇地定义了==运算符。(或者,我认为不太可能,Reflector省略了一些代码。) 我希望必须做以下其中一项: Assert.IsTrue((value.Equals(10)); // works because Equals *is* defined Assert.IsTrue(value.Value == 10); // works because == is defined for int Assert.IsTrue((int?)value == 10); // works because of the explicit conversion 这些当然是有效的,但==也有效,而这是我没有得到的部分。 我之所以注意到这一点并且问这个问题的原因是我正在尝试编写一个与Nullable类似的结构。 我从上面链接的Reflector代码开始,只做了一些非常小的修改。 不幸的是,我的CustomNullable工作方式不同。 我无法做Assert.IsTrue(value == 10) 。 […]