2010-01-03 3 views
2

Lors d'une comparaison d'objet, est-il plus rapide de comparer par nom (chaîne) ou type (pointeur)?Plus rapide à comparer par nom ou type?

Voir ci-dessous:

if(sender is DataGridView) { .. } 

ou

if(sender.GetType().ToString() == "System.Forms.DataGridView") { .. } 

Note: Je ne peux pas avoir la syntaxe exactement droite ... ceci est un exemple C#, mais le comment answer here dans un my questions m'a fait penser à propos de ça.

+0

Syntaxe modifiée ... –

+0

Pourquoi avez-vous ajouté la balise C++? Cela ressemble à seulement le code C# –

+0

En raison de mon exemple lié .. C# était juste un exemple .. il s'applique à n'importe quelle langue –

Répondre

12

Les deux ne sont pas équivalents. La seconde ne sera appariée que si le type d'expéditeur est exactement DataGridView. La première correspondra si le type est ou hérite de DataGridView. Donc, un point, les comparaisons ne sont pas les mêmes. Comme Benjamin Podszun dit dans sa réponse, la comparaison correcte pour l'égalité de type exact est:

instance.GetType() == typeof(Class) 

Cela mis à part, mon sentiment est que la comparaison de type sera plus rapide pour sûr si le type est exactement DataGridView, mais qu'il sera être moins net dans le cas où il s'agit d'un type descendant.

2
if (sender.GetType().ToString() == "System.Forms.DataGridView") 

devrait probablement mieux être

if (sender.GetType() == typeof(DataGridView)) 

quelles que soient les caractéristiques de performance pourraient être.

1

Je suis presque sûr que ceci:

sender.GetType() == typeof(DataGridView) 

sera plus rapide que cela:

sender.GetType().ToString() == "System.Forms.DataGridView" 

Si vous comparez deux chaînes, vous devez comparer plusieurs caractères. Cela pourrait prendre du temps linéaire. Si vous comparez deux objets Type, il est probablement suffisant de tester l'égalité de référence. Cela pourrait être fait à temps constant. Je ne suis pas sûr que la déclaration ci-dessus est 100% correcte, mais je suis assez confiant que ce n'est pas une bonne idée, et aussi pas efficace, de comparer les types par leurs représentations de la chaîne.

Questions connexes