AVERTISSEMENT : CE CODE EST NUL, VOIR LES COMMENTAIRES D'ANTHONY
Lequel est le plus rapide ?
1.
public bool IsValueType<T>(T obj){
return obj is ValueType;
}
2.
public bool IsValueType<T>(T obj){
return obj == null ? false : obj.GetType().IsValueType;
}
3.
public bool IsValueType<T>(T obj){
return default(T) != null;
}
4. autre chose
3 votes
La performance est-elle vraiment importante, car il s'agit en fait d'une micro-optimisation ?
6 votes
Les méthodes 2 et 3, telles qu'elles sont rédigées, ne sont pas valables.
obj == null ||
renvoie un résultat positif pour les types de référence.default(T) != null
renverra un message faux pour l'élémentNullable<T>
des structures.4 votes
Votre modification de la méthode 2 ne sera toujours pas valable.
obj != null ||
renvoie un résultat positif pour les objets de type référence non nuls.0 votes
@PoweRoy, si je le fais souvent, je suis sûr que ça ne fera pas de mal de le faire de la bonne façon.
3 votes
Puisque je suis hypercritique, euh, je veux dire utile, la méthode 1 n'aime pas les nullités.
Nullable<T>
objets.int? bar = null;
Si vous passez cela dans la fonction, vous obtiendrez false. (Je ne m'attendais pas à cela, pour être honnête).3 votes
Méthode 2 : dernière modification.
return obj == null ? false : ...
pose toujours un problème pour lesNullable<T>
.0 votes
@Anthony, pourquoi pas maintenant ?
0 votes
@smartcaveman, oui, admettre la défaite. Je pense que vous êtes sur la bonne voie en suivant la réponse de Marc, les trois méthodes que vous avez présentées (et leurs diverses itérations) ont toutes leurs divers problèmes.