L'opérateur ==
surchargé suivant fait partie de la classe Calender
dans QL.netAi-je changé l'intention de l'opérateur `==` surchargé?
public static bool operator ==(Calendar c1, Calendar c2)
{
return (c1.empty() && c2.empty())
|| (!c1.empty() && !c2.empty() && c1.name() == c2.name());
}
public bool empty() { return (object)calendar == null; }
Lorsque je tente d'accéder à la propriété SouthAfricanCalender
, je reçois un System.NullReferenceException : Object reference not set to an instance of an object.
qui m'a incité à creuser dans la source.
public SouthAfrica SouthAfricanCalender
{
get
{
if (_calender == null)
{
_calender = new SouthAfrica();
}
return _calender;
}
set
{
if (_calender == null)
{
_calender = value;
}
}
}
SouthAfrica _calender;
Je la surcharge des règlements ultérieurs comme suit en fonction de la réponse here
public static bool operator ==(Calendar c1, Calendar c2)
{
if (object.ReferenceEquals(c1,c2)) return true;
if ((object)c1 == null || (object)c2 == null) return false;
return (c1.empty() && c2.empty())
|| (!c1.empty() && !c2.empty() && c1.name() == c2.name());
}
Ma question, ai-je changé l'intention du code original avec mon amendement?
Editer: toutes les suggestions sur la façon dont cela peut être nettoyé davantage?
Vous n'avez pas besoin de 'if ((object) c1 == null || (objet) c2 == null) return false;' aucune conversion en objet n'est requise. seulement 'si c1 == null || (c2 == null) return false; ' – Aliostad
@aliostad - merci pour la suggestion ... – Ahmad
@aliostad: Pas vrai! Sans la conversion 'object', vous obtiendrez potentiellement une boucle infinie d'appels' == 'menant à une' StackOverflowException'. – LukeH