Ieri ho rivisto dopo taaaaanto tempo (tipo 2005 :P) la sintassi dei Nullable Types...
No, non vuol dire che vivo con la testa sotto la sabbia, vuol dire che non li ho mai usati... praticamente... :)
Ora, prima che luka chieda la mia testa su un piatto d'argento, mi spiego: credo che l'utilizzo vero dei nullable types a meno di architetture enormemente (eccessivamente??) complesse, sia semplicemente quello di interazione con la base dati. Questo comporta che lo ritenga pressapoco inutilizzabile.... nel senso che se devo interagire col DB, avrò delle classi specializzate che lo fanno, e queste classi specializzate mi wrapperanno i miei Int32 su SqlInt... che fa esattamente la stessa cosa....
A dire il vero, quando sono usciti mi è sempre sfuggito molto l'utilizzo... ma probabilmente mi sto dimenticando qualcosa :)
Anyway, questo non era un post sul non utilizzo o meno dei nullable types, era solo per sfatare alcuni miti:
- I nullable types NON sono reference types... è una struct, e come tale rimane value type, aggiunge solamente due proprietà all'oggetto Int32.
- In quanto value types, se passati come object sono sottoposti a Boxing/Unboxing come gli altri value types (devo vedere se ci sono casi particolari del compilatore, ma magari Adrian questo lo sa già :))
- Il controllo di un nullable type per un null come object da, ovviamente... null...
- Controllare il null, comunque, richiede boxing... meglio controllare HasValue, ci si evita un pò di tempo cpu....
- La somma di un nullable type con lo stesso type non può essere assegnato al type normale senza cast (per intenderci, int? + int = int?... altrimenti bisogna fare Convert.ToInt32(int? + int)
- Se ill nullable type è null, la somma darà null ovviamente... o il default value, se si converte e si assegna al type non nullable (0 nel caso di interi)
... questo direi che è una summa dei dubbi che ho sentito... se mi sono dimenticato qualcosa o (orrore!!! :) ho sbagliato qualcosa..... avvisatemi :)