J'utilise beaucoup les types Nullable<T>
lors du chargement de valeurs dans des classes et des structures quand j'ai besoin qu'elles soient nulles, comme le chargement d'une valeur nullable à partir d'une base de données (comme l'exemple ci-dessous).Casting (int?) Null vs. new int?() - Quel est le meilleur?
Considérez ce bout de code:
public class InfoObject
{
public int? UserID { get; set; }
}
// Load the ID into an SqlInt32
SqlInt32 userID = reader.GetSqlInt32(reader.GetOrdinal("intUserID"));
Quand je dois charger une valeur dans une propriété annulable, parfois je le fais:
infoObject.UserID = userID.IsNull ? (int?)null : userID.Value;
Parfois, je fais ceci:
infoObject.UserID = userID.IsNull ? new int?() : userID.Value;
Bien qu'ils obtiennent le même résultat, je voudrais voir si quelqu'un sait ce qui est préférable d'utiliser entre (int?)null
et new int?()
en ce qui concerne la performance, le plus petit code IL, les meilleures pratiques, etc.?
En général, j'ai été Privilégiant la version new int?()
du code ci-dessus, mais je ne suis pas sûr que la coulée (int?)null
est plus rapide pour le compilateur à résoudre que new int?()
.
À la votre!
Je suis d'accord avec vous. '(int?) null' semble beaucoup mieux que' new int?() 'surtout lorsqu'il est utilisé dans les instructions conditionnelles en ligne comme mon exemple le montre. En ce qui concerne votre question: vous avez répondu quand vous avez dit que l'IL est la même. Les temps de construction ne sont pas actuellement un problème (à moins que j'utilise TFSBuild, mais c'est une histoire complètement différente) donc aussi longtemps que l'IL correspond, je suis heureux :) – Codesleuth
Mon préféré (avec la version cast comme une seconde très proche) est 'default (int?)'. – sblom