Supponiamo di avere una variabile nullable.
int? myVar = null;
Se desideriamo utilizzarne il valore, ci sono almeno due opzioni:
Trasmissione esplicita
DoSomething((int)myVar);
Chiamare Nullable<T>
's .Value
proprietà
DoSomething(myVar.Value);
Ho notato che quando la conversione fallisce, in entrambi i casi viene generata la stessa eccezione ( System.InvalidOperationException: Nullable object must have a value
), il che mi fa pensare che entrambi siano implementati nello stesso modo (ma non ho trovato prove per tale affermazione ).
La mia domanda è:
- C'è qualche differenza tra queste due opzioni? (cioè, c'è qualche scenario in cui avrebbero un comportamento diverso?)
- Per quanto riguarda lo stile, una di queste due opzioni è preferibile rispetto all'altra? Perché? Secondo quale guida di stile?
Aggiorna :
Potrebbe essere ovvio, ma se ti capita di imbatterti in questa domanda, potresti considerare che un vantaggio di .Value
rispetto al cast esplicito è che impedisce di provare inavvertitamente il cast in un tipo errato.
D'altra parte, il cast esplicito potrebbe essere più facile da leggere in alcuni scenari. Ad esempio, avere var value = (int)myVar;
consente una più facile identificazione del tipo di var value = myVar.Value;