Сегодня я писал некоторый код, и что-то не работало, как я ожидал.
Почему следующий код выполняется, хотя условие должно было иметь значение false?
альтернативный текст http://img215.imageshack.us/img215/3011/agfewrf.gif
Я попытался поставить скобки вокруг двух условий и изменить их положение, но приложение EndedUsingApplication даже все еще выполняется.
РЕДАКТИРОВАТЬ:
Это не имеет ничего общего с || или && операторы. Посмотри на это...
Никто не может извлечь уроки из моей ошибки, если я не отправлю код виновника, так что вот оно.
public static bool operator ==(ActiveApplication a, ActiveApplication b)
{
if ((object)a == null || (object)b == null)
return false;
return a.process_name == b.process_name && a.window_title == b.window_title;
}
public static bool operator !=(ActiveApplication a, ActiveApplication b)
{
return a == b ? false : true;
}
А вот и рабочий код...
public static bool operator ==(ActiveApplication a, ActiveApplication b)
{
// Casting to object class prevents this comparison operator being executed
// again and causing an infinite loop (which I think .NET detects and stops
// but it would still be a huge hole in the logic.
if ((object)a == null && (object)b == null)
return true;
if ((object)a == null ^ (object)b == null)
return false;
return a.process_name == b.process_name && a.window_title == b.window_title;
}
public static bool operator !=(ActiveApplication a, ActiveApplication b)
{
return a == b ? false : true;
}
Проблема заключалась в том, что оператор! = Получил два нулевых значения.