Bonjour bête question
Pourquoi on ne peut pas faire :
Et comment résoudre le problème si on doit le faire? :mrgreen:Code:
1
2
3
4
5
6
7
8 switch (myObj) { case typeof(String): break case typeof(Int32): break }
Version imprimable
Bonjour bête question
Pourquoi on ne peut pas faire :
Et comment résoudre le problème si on doit le faire? :mrgreen:Code:
1
2
3
4
5
6
7
8 switch (myObj) { case typeof(String): break case typeof(Int32): break }
:roll:Code:
1
2
3
4
5
6 if(myobj is String) { ... } else if(myobj is Int32) { ... }
on peut aussi faire :
Code:
1
2
3
4
5
6
7 swith(myObject.Gettype().ToString()) { case "system.String": break; etc... }
C'est une autre option :)
y a ça aussi
Code:
1
2
3
4
5
6
7
8 swith(myObject.Gettype()) { case typeof(String): break; etc... }
Salut
J'ignorais l'option de Kaidan en alternative au TypeOf
C'est bien pratique et je retiensCode:if(myobj is String)
Sauf que les cascades de else if c'est aussi "*chiant*" et :aie:
Et donc pour la cause ici, j'aime bien le Switch(Gettype())
Ou alors possibilité d'un return ou un break a chaque
Code:if(myobj is Type)
Je suis pas sûr que ce code fonctionne :roll:. Pour avoir tester, ça compile pas.
switch ne fonctionne qu'avec des types intégraux.
Avec ToString() ça fonctionne mais comme on doit taper le nom complet de la classe, c'est une source d'erreur qui ne sera pas signalée par le compilateur. C'est pourquoi j'utilise en règle générale le is plutôt que le GetType().ToString().
De plus, is est environ 6 fois plus rapide que GetType().ToString() == "", sans compter que GetType().ToString() nécessite plus de mémoire pour fonctionner (il faut instancier une/deux string à chaque test).
Tu a tout a fait raison !!
Donc c'est soit le switch avec le ToString
Soit les if else if
Soit les
if
{
// rupture : (break, continue,return)
}
Personnellement je préfere la troisieme solution.
Merci à tous :)
je vais appliquer le 3ème conseil d'olibara
Je n'aime pas n'ont plus les if else if ...je trouve que ca devient vite fort illisible