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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IntPtr и null 
:(
    Опции темы
stab
Дата 17.1.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



такой вопрос идеологический созрел. в чужом коде часто вижу такое:

Код

IntPtr hPopupWnd = GetLastActivePopup(hWnd);
if (hPopupWnd != null)
{
  // blah blah blah
}


строчка if (hPopupWnd != null) наводит на подозрения. IntPtr это структура, null вообще же быть не может. смотрим на перегрузку операторов:

Код

public static unsafe bool operator !=(IntPtr value1, IntPtr value2)
{
      return (value1.m_value != value2.m_value);
}


null не учитывается, как это вообще работать-то может? по логике для проверки на null надо использовать IntPtr.Zero. кароче, в запутаньи я. прочистите мозг, плиз.  smile 


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
ivashkanet
Дата 17.1.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



cully, дальше лучше:
Код
            IntPtr hPopupWnd = (IntPtr) null;


 smile 
PM MAIL WWW ICQ   Вверх
stab
Дата 17.1.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



.. или там боксинг происходит, но тогда hPopupWnd != null всегда будет true.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
ivashkanet
Дата 17.1.2007, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



А так нельзя: 
Код
      int i = (int)null;

 smile

Добавлено @ 15:27 
Вот такую штуку нашел:
Код

[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail), CLSCompliant(false)]
public static unsafe explicit operator IntPtr(void* value)
{
      return new IntPtr(value);
}
[CLSCompliant(false), ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
public unsafe IntPtr(void* value)
{
      this.m_value = value;
}


и еще
Код

internal unsafe bool IsNull()
{
      return (this.m_value == null);
}


Может потому  smile 
PM MAIL WWW ICQ   Вверх
stab
Дата 17.1.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



если отдекомпилить такое сравнение, то его просто нет, видимо оптимизатор удаляет как заведомо истинное условие. в общем, ошибка в голове у авторов кода.. или нет?  smile 


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
ivashkanet
Дата 17.1.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



А код:
Код
IntPtr hPopupWnd =  (IntPtr)null;

Преобразуется в 
Код
   IntPtr ptr1 = IntPtr.Zero;

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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