Null ToString

Pisząc pewien zawansowany program w pracy zdałem sobie z czegoś sprawę.

W kodzie nie raz widziałem takie konstrukcje.

 

int? myInt = null;
string test = myInt.HasValue ? myInt.Value.ToString() : string.Empty;

Dlaczego jednak nie użyć po prostu bezpośredniego odwołania ToString().

string test = myInt.ToString();

Od dziwo obie składnie robią dokładnie to samo gdyż metoda “ToString()” posiada swój własny kod zabezpieczający przed wartością null.

W programach typu Reflector jak Decompile ReSharpera bądź JustDecompile Telerik-a możemy podejrzeć kod metody “ToString()” dla typów Nullable.

public override string ToString()
{
    if (!this.HasValue)
    {
    return "";
    }
    return this.value.ToString();
}

Jak zawsze jednak chodzi o czytelność kodu.

Naturalnie w takim wypadku powinniśmy otrzymywać wyjątek “NullReferenceException” ale w tym wypadku nic takiego się nie dzieje.

Warto o tym pamiętać by nie pisać nie potrzebnego kodu w stylu:

DateTime? myVariable = null;
string date = myVariable.HasValue ? myVariable.Value.ToString() : string.Empty;

Nawet sam Eric Lippert jeden z twórców i kuratorów C# to potwierdza na StackOverflow.

StackOverflow Eric Lippert