2009-04-29 2 views
0

Un objet métier renvoie un type de données short?.Ce code va-t-il casser?

Comment pourrais-je obtenir cette valeur dans une variable?

short? myShort = SomeBusinessObject.UserBlah; 

Est-ce correct? Est-ce que ça va casser si c'est nul?

+0

Je pense que vous devez clarifier ce que vous pensez être nul. Beaucoup de réponses font des suppositions sur ce que renvoie UserBlah. Ma conjecture (et donc ma réponse) est que vous essayez de protéger contre SomeBusinessObject étant nul. Cependant, c'est une supposition et plus d'infos seraient bonnes. –

Répondre

1

Oui, c'est correct.

2

Etes-vous en train d'essayer de protéger contre SomeBusinessObject en étant nul? Si c'est le cas, les types NULL ne vous aideront pas. Vous devez toujours vérifier si votre objet SomeBusinessObject est nul.

Je suppose que c'est le cas car si UserBlah renvoie un court, il ne sera jamais nul (car short n'est pas un type Nullable).

1

myShort sera null si l'objet métier renvoie null.

Vous ne pouvez pas référencer myShort directement comme type de valeur, c'est donc OK. Vous pouvez utiliser myShort.HasValue pour voir si myShort est null ou non.

Utilisez myShort.Value pour obtenir la valeur. Il va lancer une exception si aucune valeur n'est définie.

Vous pouvez utiliser GetValueOrDefault() et transmettre une valeur par défaut pour obtenir une valeur même si aucune n'est définie (null). Cette fonction renvoie la valeur transmise si le type Nullable est null.

1

myShort ne sera nulle si UserBlah est implicitement convertible en Nullable<Int16> et il est réglé sur null, auquel cas il ne cassera pas à moins que vous essayez d'accéder à un membre de myShort.Value.

Vous pouvez aussi le faire:

short defaultValue = 0; 
short myShort  = SomeBusinessObject.UserBlah ?? defaultValue; 
4

C'est exact. Il vous suffit de vous inquiéter si vous affectez myShort à un non annulable court, auquel cas vous devez vérifier HasValue, comme ceci:

short s = myShort.HasValue ? myShort.Value : (short) 0; // or some other short value 
+2

GetValueOrDefault() – Nick

+0

Encore mieux. J'utilise cette syntaxe car la valeur par défaut est 0, et nous utilisons * .MinValue si la valeur de DB est nulle. Nous effectuons toujours la transition vers des types nullables avec un système hérité. –

+0

Utilisez l'opérateur coalesce nul à la place du motif ci-dessus. –

4

Pour l'obtenir dans une utilisation variable de myShort.Value après vérification myShort .HasValue

2

ne pas oublier l'opérateur coalescent null.

short myShort = SomeBusinessObject.UserBlah ?? 0; 

si SomeBusinessObject.UserBlah est nul, il passe juste la valeur à droite de ?? donc vous pouvez par défaut à quelque chose.