sty
13
2012
Ostatnio spędziłem wiele czasu siedząc nad zdaje się prostym kawałkiem kodu:
var DTaccType = DTType as FlexCubeAccount;
var CTaccType = CTType as FlexCubeAccount;
if (DTaccType != null && CTaccType != null)
{
Enums.DictionaryObject.ACCOUNTANCY_DEBIT_TYPE DTAccountType = DTaccType.GetAccountType();
Enums.DictionaryObject.ACCOUNTANCY_DEBIT_TYPE CTAccountType = CTaccType.GetAccountType();
...
Po kompilacji i uruchomieniu wywaliło mi się z NullReferenceException który poleciał wewnątrz if-a. Ale jakim cudem ? Sprawdzam w debuggerze no i pokazuje jak byk że CTaccType jest nullem. To jakim cudem weszło do if-a ? A co ciekawsze sprawdzenie CTaccType != null daje true. Rozwiązanie problemu podpowiedział mi kolega przypominając o takim cudzie jak przeciążenie operatorów. Jakiś geniusz implementując klasę FlexCubeAccount przeciążył operator != w cudowny sposób:
public static bool operator !=(FlexCubeAccount fca, FlexCubeAccount fcb)
{
if( (object)fca != null && (object)fcb != null)
{
return fca.m_fcnNumber != fcb.m_fcnNumber;
}
return true;
}
No i siedź sobie później człowieku i mów pod nosem "ale WTF ? jakim cudem ?" :)