7
votes

Comment puis-je convertir int? dans int

J'ai créé une SPROC qui enregistre un objet et retourne l'ID du nouvel objet enregistré. Maintenant, j'aimerais retourner une INT PAS UN INT?

public int Save(Contact contact)
{
  int? id;
  context.Save_And_SendBackID(contact.FirstName, contact.LastName, ref id);
  //How do I return an int instead of an int?
}


0 commentaires

5 Réponses :


16
votes
return id ?? 0; // Returns 0 if id is null

4 commentaires

Notez que id.value lancera une exception lorsque l'identifiant est null. Dans certains contextes, cela sera approprié, sinon, utiliser ?? .


Est-ce que ?? fonctionne uniquement avec des types de référence nullables <> ou aussi des types de référence réguliers?


Si fonctionne avec tous les types de référence. x ?? y est essentiellement sténographique pour x! = null? x: y


Grand merci. Je savais ce que ça faisait, mais j'ai juste eu cette question à tête dans mon esprit.



3
votes
return id.Value;
You might wanna check if id.HasValue is true, and return 0 or something if not.

0 commentaires

0
votes
if (id.HasValue) return id.Value;
else return 0;

4 commentaires

ou ID de retour ?? 0 . Exactement le même :)


C'est une façon assez longue de dire " id ?? 0 "


@Blogbeard: Techniquement, ce serait ID de retour ?? 0; :)


@Philippe - En fait, ce n'est pas tout à fait la même chose; La valeur en vérification écrite deux fois si une valeur est attribuée. Le ?? Approche vérifie une fois . Pour vérifier aucun temps (et toujours se comporter à 100% identique), vous pouvez utiliser retour ID.GetvalUERefault () .



6
votes

Vous pouvez utiliser la fonction getvalueordfault () code> sur NULLABLE com / Questions / 3040173 / Comment-i-i-convert-int-in-int-int / 3040186 # 3040186 "> Réponse coalescente de Richard77 Mais je dirais un peu plus lisible ... p>

Cependant, décider si c'est une bonne idée, c'est à vous de décider. Telle qu'une exception est peut-être plus appropriée? P>

if (! id.HasValue)
    throw new Exception("Value not found"); // TODO: Use better exception type!

return id.Value;


1 commentaires

+1 pour suggérer que jeter une exception pourrait être la chose appropriée à faire. Il me semble que trop de programmeurs sont très prompts à utiliser une valeur par défaut, sans d'abord vous assurer que NULL n'est pas vraiment une erreur.



0
votes
return id.HasValue ? id.Value : 0;
this returns the value of id in case it is not null and 0 in the other case.

1 commentaires

Quel est le problème avec ID de retour ?? 0; , qui fait exactement la même chose et est plus efficace?