int
и long
никогда не равны, так что ...
Перегрузка ==
использования фиксируется во время компиляции. За исключением, если вы скажете:
(dynamic)a1 == (dynamic)a2
в этом случае связывание (?, Который перегрузки) происходит во время выполнения, которые должны реально работать в вашем примере, так как существует перегрузка:
bool operator ==(long, long)
встроенный -в в C#.
Предупреждение: Привязка может завершиться неудачей, и если вы используете dynamic
, вы можете запустить исключение (время выполнения) из-за этого. Что-то вроде:
dynamic a1 = 2;
dynamic a2 = "two";
dynamic test = a1 == a2; // Bang?
Если вы не хотите dynamic
, вы можете попробовать с Convert.ChangeType
если либо comparand может быть его тип изменен, чтобы соответствовать типу другого. Затем вы можете позвонить Equals
, который находится в virtual
, и найдет переопределенную реализацию (например, int.Equals
или long.Equals
, каждая из которых переопределяет object.Equals
).
Итак, почему '(int) 2 == (long) 2' возвращает true? И что произойдет Если я не буду развиваться в C# 4? – alisabzevari
@alisabzevari, это потому, что оператор '==' перегружен для 'long', поэтому неявное преобразование производится из' int' в 'long' –
Итак, почему они не использовали неявное преобразование в' int.Equals' и 'long.Equals'? Я думаю, что это может решить проблему. – alisabzevari