Stavo scrivendo del codice oggi e qualcosa non funzionava come mi aspettavo.Override C# Problema di istruzioni condizionali
Perché il codice seguente viene eseguito anche se la condizione deve essere valutata su falso?
alt text http://img215.imageshack.us/img215/3011/agfewrf.gif
Ho provato a mettere parentesi attorno alle due condizioni, e la loro posizione di commutazione, ma l'EndedUsingApplication esegue addirittura ancora.
EDIT:
Non ha nulla a che fare con il || oppure & & operatori. Guardate questo ...
alt text http://img20.imageshack.us/img20/6655/aaaaaal.gif
Nessuno può imparare dal mio errore a meno che inserisco il codice colpevole, ecco che è.
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;
}
Ed ecco il codice di lavoro ...
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;
}
Il problema sembrava essere quando l'Operatore! = Ha ricevuto due valori nulli.
potete inserire il codice? – danish
@Jay Riggs: Bingo! Sì, si scopre che ho. C'è una cattiva logica in là che sta restituendo un risultato errato. Scrivi una risposta corretta e forse la contrassegnerò come risposta;) – Nippysaurus
@Nippy - aggiungi come risposta! Grazie! –