Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перегрузка оператора == и проверка на null 
V
    Опции темы
Dblma
Дата 27.8.2009, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 6.11.2007
Где: Moscow

Репутация: нет
Всего: 1



Как сопоставить 2 этих момента? 
Получается, что если мы перегрузим оператор ==, то при проверке == null мы идём в перегруженный нами оператор, а там есть 2 варианта - либо NullReferenceException, либо, если пытаемся проверить на null аргументы, бесконечную рекурсию.

Как быть?
PM MAIL ICQ   Вверх
mihryak
Дата 27.8.2009, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Guidelines for Overloading Equals() and Operator == (C# Programming Guide)

я перегружаю примерно так
Код

    public class MyClass
    {

        public Guid Id { get; set; }

        #region Equality overrides

        public bool Equals(MyClass myClass)
        {
            return ReferenceEquals(myClass, null) ? false : Id == myClass.Id;
        }

        public override bool Equals(object obj)
        {
            return Equals(obj as MyClass );
        }

        public override int GetHashCode()
        {
            return Id.GetHashCode();
        }

        public static bool operator ==(MyClass left, MyClass right)
        {
            return ReferenceEquals(left, null) ? ReferenceEquals(right, null) : left.Equals(right);
        }

        public static bool operator !=(MyClass left, MyClass right)
        {
            return !(left == right);
        }

        #endregion
    }

PM MAIL ICQ   Вверх
Dblma
Дата 27.8.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 6.11.2007
Где: Moscow

Репутация: нет
Всего: 1



Понял, спасибо.
Подумал бы чуть подольше - сам бы додумался.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.