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.