Sono un principiante di C # e ho appena riscontrato un problema. C'è una differenza tra C # e Java quando si ha a che fare con l'operatore ternario ( ? :
).
Nel seguente segmento di codice, perché la quarta riga non funziona? Il compilatore mostra un messaggio di errore di there is no implicit conversion between 'int' and 'string'
. Anche la quinta riga non funziona. Entrambi List
sono oggetti, non è vero?
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
Tuttavia, lo stesso codice funziona in 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
Quale caratteristica del linguaggio in C # manca? Se esiste, perché non viene aggiunto?
int
non è un oggetto. È un primitivo.
ArrayList<String>
e ArrayList<Integer>
diventa solo ArrayList
nel bytecode. Ciò significa che sembrano essere esattamente lo stesso tipo in fase di esecuzione. Apparentemente in C # sono tipi diversi.