1

我有自定义类 Rational、Real 和 Complex。在 Complex 中,我重载了允许我比较 Complex 和 Real,或者 Complex 和 Rational 的运算符。比如说,如果我可以将 Rational 隐式转换为 Complex,那将很容易,但由于不值得探讨的原因,我不能。

因此,除其他外,我有,

==(Complex a, Real b)

并且

==(Real a, Complex b)

显然,当我尝试比较时

c==null

我收到呼叫不明确的错误消息。我在相关线程上看到了我可以定义的想法==(Complex a, object b) ,但如果我想允许对称,我还需要==(object a, Complex b)在这种情况下,两个复合体之间的比较也将是模棱两可的。

现在,当我检查 null 时,我必须先将 Complex 转换为一个对象。什么是更好的解决方案?(我希望有一个通用的解决方案,而不是依赖于类之间任何关系的解决方案,例如继承。)

4

3 回答 3

0

我可能应该发布我认为没有解决方案的帖子,我只是决定放弃对称性并使用 ==(Complex a, object b)。感谢所有发帖的人!

于 2013-06-23T05:30:01.180 回答
0

为什么要使用第二个重载?您确定不能使用第一个进行检查吗?没有您正在寻找的“好看”的解决方案。

于 2013-05-17T05:03:42.027 回答
0

我认为你有类似==(Complex c, Real C)and的东西==(Complex c, Complex C),当然编译器不知道选择哪一个,所以当你与 null 比较时,你必须将它转换为c1 == (Complex) null

于 2013-05-17T05:09:26.330 回答