Že můžete v .NETu za každý hodnotový typ doplnit otazník a udělat z něj nullable typ, je asi jasné. Do takové proměnné lze přiřadit jak hodnotu, tak i null. Vzhledem k tomu, že teď často pracuji s kódem jiných lidí, vídám různé způsoby, jak s těmito typy pracovat.
Zajímalo by mě, jak řešíte následující situace.
Test null hodnoty
Znáte to, máme proměnnou int? test a chceme zjistit, jestli je v ní null nebo ne.
Používáte test.HasValue nebo test != null?
Ternární operátor
Známým problémem u nullable typů je fakt, že pokud použijeme ternární operátor, který v jedné větvi vrací int a ve druhé null, kompilátoru se to nelíbí. Ten null je nutné přetypovat na int?, aby kompilátor věděl, jakého typu ta hodnota je.
Nelze tedy napsat něco jako
public int? ToNullableInt(string value)
{
int a;
return int.TryParse(value, out a) ? a : null;
}
Aby to fungovalo, musíme null přetypovat na int?, vypadalo by to tedy takto:
return int.TryParse(value, out a) ? a : (int?)null;
Nedávno jsem ale viděl řešení, které by mě nenapadlo:
return int.TryParse(value, out a) ? a : new int?();
Které řešení upřednostňujete vy?