Ho una condizione in un'applicazione silverlight che confronta 2 stringhe, per qualche motivo quando lo uso ==
restituisce false mentre .Equals()
restituisce true .
Ecco il codice:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
Qualche motivo per cui questo sta accadendo?
==
, ma gli operatori non sono polimorfici. In questo codice, l' ==
operatore viene richiamato sul tipo object
, che esegue un confronto di identità anziché un valore.
==
sovraccarico in base al tipo di tempo di compilazione degli operandi. La Content
proprietà è object
. Gli operatori non sono virtuali, pertanto ==
viene chiamata l' implementazione predefinita di , fornendo un confronto di uguaglianza di riferimento. Con Equals, la chiamata passa al metodo virtuale object.Equals(object)
; string
ignora questo metodo ed esegue un confronto ordinale sul contenuto della stringa. Vedere msdn.microsoft.com/en-us/library/fkfd9eh8(v=vs.110).aspx e riferimentiource.microsoft.com/#mscorlib/system/string.cs.507 .
==
ha il tipo di tempo di compilazione object
e il lato destro ha il tipo di tempo di compilazione string
, il compilatore C # deve scegliere il sovraccarico (problematico, in questo caso) operator ==(object, object)
; ma sarà un avvertimento in fase di compilazione che potrebbe essere intenzionale. Quindi leggi gli avvisi in fase di compilazione! Per risolvere il problema e continuare a utilizzarlo ==
, eseguire il cast del lato sinistro su string
. Se ricordo bene, il testo di avvertimento suggerisce proprio questo.