У меня есть тип C#, для которого логический смысл сравнивать для равенства с int. Назовите этот тип Number
.Должен ли я разрешать асимметричные равные?
Однако я не могу сделать Equals симметричным, потому что я не могу изменить Int32.Equals(object other)
. Таким образом, я должен разрешить асимметричное равенство, например:
Number numberThree = new Number(3);
int intThree = 3;
bool equal;
equal = numberThree.Equals(intThree); // equal is true
equal = intThree.Equals(numberThree); // equal is false
Или я должен просто разрешить только равенство, если типы совпадают, а также числовое значение?
Привет, Джон, спасибо за ответ. Это настоящий позор, у C# нет встроенного Number, такого как Java. Но да, ваш пример словаря доказывает это. Хорошего дня. :) – Xenoprimate
Однако вы можете переопределить оператор '==' просто отлично. Или используйте оператор неявного преобразования. С помощью любого из них вы можете гарантировать, что '(a == b) == (b == a)'. – Luaan
@Motig: Даже если у .NET был тип «Number», это не устранило бы требование сделать его симметричным ... –