Je suis un débutant en C # et je viens de rencontrer un problème. Il y a une différence entre C # et Java lorsqu'il s'agit de l'opérateur ternaire ( ? :
).
Dans le segment de code suivant, pourquoi la 4ème ligne ne fonctionne-t-elle pas? Le compilateur affiche un message d'erreur de there is no implicit conversion between 'int' and 'string'
. La 5ème ligne ne fonctionne pas aussi bien. Les deux List
sont des objets, n'est-ce pas?
int two = 2;
double six = 6.0;
Write(two > six ? two : six); //param: double
Write(two > six ? two : "6"); //param: not object
Write(two > six ? new List<int>() : new List<string>()); //param: not object
Cependant, le même code fonctionne en Java:
int two = 2;
double six = 6.0;
System.out.println(two > six ? two : six); //param: double
System.out.println(two > six ? two : "6"); //param: Object
System.out.println(two > six ? new ArrayList<Integer>()
: new ArrayList<String>()); //param: Object
Quelle fonctionnalité de langage en C # est manquante? Le cas échéant, pourquoi n'est-il pas ajouté?
int
n'est pas un objet. C'est un primitif.
ArrayList<String>
et ArrayList<Integer>
devient juste ArrayList
dans le bytecode. Cela signifie qu'ils semblent être exactement du même type au moment de l'exécution. Apparemment, en C #, ils sont de types différents.