2010-06-15 6 views
1

Est-il plus rapide de faire une comparaison ou une distribution en C# .Net?
Par exemple:Diverses performances

bool? flag = null;  
...  
if(flag == true)... or if((bool)flag)... 

De plus, quel est le coût (en mémoire) d'un casting?

+0

Je dois demander ... pourquoi utiliser un bool Nullable? J'ai toujours trouvé que mettre mon bool à n'importe quelle valeur est 'correct' et ensuite seulement le changer en fonction de certaines conditions fonctionne, et ensuite vous évitez cette question: vous pouvez simplement utiliser "if (flag)" – AllenG

+0

Je pensais que ce serait le moyen le plus simple d'illustrer ma question. Vous avez raison cependant, en utilisant juste un booléen est un meilleur moyen. – Richard

Répondre

3

Si la mémoire est utilisée, le compilateur vous forcera à transformer le bool? en bool avant de l'utiliser dans l'instruction if. Vous pourriez aimer l'opérateur de coalesce null:

//If flag == null then return false, otherwise return the value of flag. 
if (flag ?? false) 
+0

+1 pour avoir mentionné ?? – juharr

+0

Wow merci, ça m'a énormément aidé. – Richard

0

IIRC, Ceux traduisent à peu près la même chose. Sauf si vous faites un nombre absurdement grand de tels contrôles, la différence est imperceptible à toutes fins pratiques.

0

Si une valeur nulle dans le drapeau signifie «faux», j'utiliserais la comparaison. La distribution est une mauvaise idée, car elle enverra une exception si flag est nul. Pour être sûr, vous devez tester null avant le casting. Cela signifie que vous devez faire une comparaison et une distribution au lieu d'une comparaison seulement.

-1

La différence de performance est négligeable.

Gardez à l'esprit que

bool? flag = null; 
// ...other code... 
if ((bool)flag) 
{ 
} 

pourrait jeter un InvalidOperationException si flag n'a pas été affecté dans le code entre la déclaration variable et la distribution.

Questions connexes