2010-02-11 4 views
5

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!

Répondre

8

Ils vont générer le même IL. Utilisez ce que vous trouvez plus facile à lire.

Lorsque vous parlez de quelque chose qui est "plus rapide à résoudre pour le compilateur" parlez-vous de micro-optimisation de votre build fois? Je n'ai aucune idée de ce qui serait le plus rapide là-bas, mais je doute qu'il fera une différence fiable mesurable pour tout le code important.

Personnellement j'utilise null chaque fois que je peux le faire sans aucune ambiguïté; Je pense que je préfère toujours la distribution à l'appel new, mais cela ne fait aucune différence réelle.

+0

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

+0

Mon préféré (avec la version cast comme une seconde très proche) est 'default (int?)'. – sblom

Questions connexes