Die folgenden überladenen ==
Betreiber Teil der Calender
Klasse in QL.netHabe ich die Absicht des überschriebenen `==` Operators geändert?
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; }
ist, wenn ich versuche, die SouthAfricanCalender
Eigenschaft zuzugreifen, erhalte ich ein System.NullReferenceException : Object reference not set to an instance of an object.
, die mich dazu veranlassten in die Quelle zu graben.
public SouthAfrica SouthAfricanCalender
{
get
{
if (_calender == null)
{
_calender = new SouthAfrica();
}
return _calender;
}
set
{
if (_calender == null)
{
_calender = value;
}
}
}
SouthAfrica _calender;
Ich habe die Überlastung Fügte wie auf die Antwort 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());
}
Meine Frage basiert folgt, haben sich geändert ich die Absicht der ursprünglichen Code mit meiner Änderung?
Edit: irgendwelche Vorschläge, wie dies weiter aufgeräumt werden kann?
Sie brauchen nicht if ((Objekt) c1 == null || (Objekt) c2 == null) return false; 'kein Casting zum Objekt erforderlich. nur 'wenn c1 == null || (c2 == null) return false; ' – Aliostad
@aliostad - danke für den Vorschlag ... – Ahmad
@aliostad: Nicht wahr! Ohne die Umwandlung in "Objekt" erhalten Sie möglicherweise eine Endlosschleife von '==' Aufrufen, die zu einer 'StackOverflowException' führen. – LukeH