Dovrei sempre convertire Convert.ToInt32 i miei numeri interi per tenere conto dei potenziali numeri annullabili?

1

Se il mio MSSQL database contiene un tipo di dati che è NULL (cioè è consentito null) quindi ORM , ad esempio EntityFramework nel mio caso, crea oggetti .NET che sono annullabili.

Questo è ottimo, e il modo in cui utilizzo nullables è il seguente:

C #

int? someInt = 5;

int newInt = someInt.Value; // woot

VB.NET

Dim someInt As Integer?

Dim newInt As Integer = someInt.Value ' hooray

Tuttavia, di recente ho dovuto apportare una modifica al database per rendere un campo Id non più NULL (nullable). Ciò significa che .Value è ora rotto. Questa è una seccatura se la proprietà Id viene usata molto.

Una soluzione che ho pensato è utilizzare solo Convert.ToInt32 sui campi Id, quindi non importa se un int è nullable o meno.

C #

int newInt = Convert.ToInt32(someInt); // always compiles

VB.NET

Dim newInt As Integer = Convert.ToInt32(someInt) ' always compiles

È un approccio sbagliato e ci sono alternative?

    
posta Rowan Freeman 22.10.2013 - 06:59
fonte

1 risposta

5

Bene, prima di tutto, se un campo è annullabile, significa che potrebbe non avere un valore. Gli Ints hanno sempre un valore. Se devi, per qualche motivo, falsificare un valore, quindi utilizzare someNullable.GetValueOrDefault() (che btw, consente a un parametro di definire il valore predefinito).

In secondo luogo, la cosa giusta da fare quando qualcosa va dal valore a volte avere sempre un valore, è rappresentarla come necessario per rappresentare questo nuovo comportamento.

Il tuo problema fondamentale è che stai cercando di trattare due scenari completamente separati come se fossero gli stessi: in un modo o nell'altro probabilmente non riuscirai a modellare correttamente ciò che sta accadendo.

    
risposta data 22.10.2013 - 08:18
fonte

Leggi altre domande sui tag