51 votes

La manière la plus efficace de vérifier si un objet est un type de valeur

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ément Nullable<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.

-2voto

user1941574 Points 1

Vous pouvez utiliser

obj.GetType().IsValueType

Il s'agit d'une réflexion mais d'une manière claire au lieu d'un soin d'unboxing.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X