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?
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?
Oui, c'est correct.
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).
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
.
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;
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
GetValueOrDefault() – Nick
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é. –
Utilisez l'opérateur coalesce nul à la place du motif ci-dessus. –
Pour l'obtenir dans une utilisation variable de myShort.Value après vérification myShort .HasValue
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.
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. –