Я говорю о языке C# здесь.Is Nullable <T>. Реализация метода Equals Wrong?
Определение метода Object.Equals (Object) в msdn является:
Определяет, является ли указанный объект равен текущему объекту.
Если два объекта равны, то возвращает истину, однако, если они равны нулю она возвращает ложь:
x.Equals (пустая ссылка (Nothing в Visual Basic )) возвращает ложь.
Почему? Поскольку null не является объектом.
Исключение NullReferenceException, если объект пареметр равен нулю.
, а также у нас есть это:
x.Equals (у) возвращает то же значение, как y.equals (х).
Нет проблем вообще до здесь. Он очень похож на Java. Но C# также предоставляет структуру System.Nullable
для непустых типов. Насколько я знаю, структура - это объект. Он наследует метод Object.Equals.
Если у меня есть-структуру, как это:
struct Car
{
public string Make;
public string Model;
public uint Year;
public Car(string make, string model, uint year)
{
Make = make;
Model = model;
Year = year;
}
}
И создать четыре экземпляра:
Car car1 = new Car("make", "model", 2009);
Car car2 = new Car("make", "model", 2009);
Car car3 = new Car("make", "model", 2008);
car1.Equals(car2); // will return true
car1.Equals(car3); // will return false;
И насколько я знаю, мы не можем установить на структуру с нулевым значением. Но System.Nullable это структура, и мы можем сделать это скомпилировать без ошибок:
int? i = null;
(.? Я надеюсь, что кто-то может объяснить это также Является ли структура или что-то еще)
Мой реальный вопрос является:
i.Equals(null); // returns true!
(Обычно x.Equals (у) = y.equals (х) Конечно null.Equals (I) не действует здесь ...)
Очевидно Object.Equals метод переопределено здесь. Возможно, это задокументировано, и это указано. Но этот подход правильный/хороший? Если да, то в чем разница между == и Equals для значений Nullable?
Но, что бы он ни делал в фоновом режиме, мы вызываем i.Equals (null), и он возвращает true, когда i равно null. Он должен возвращать false для любого другого объекта. – JCasso
@jcasso, Nullable в общем ... странны и часто ведут себя неожиданными способами. Часть путаницы заключается в том, что я никогда не могу быть нулевым, потому что это фактически тип значения. Лучше думать об этом как о пустом значении. – JaredPar
По крайней мере, вы признали, что это странно :) Я думал, что я единственный. – JCasso