Sou um novato em C # e acabei de encontrar um problema. Há uma diferença entre C # e Java ao lidar com o operador ternário (? :
).
No segmento de código a seguir, por que a 4ª linha não funciona? O compilador mostra uma mensagem de erro de there is no implicit conversion between 'int' and 'string'
. A 5ª linha não funciona tão bem. Ambos List
são objetos, não são?
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
No entanto, o mesmo código funciona em 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
Qual recurso de linguagem está faltando no C #? Se houver, por que não foi adicionado?
int
não é um objeto. É um primitivo.
ArrayList<String>
e ArrayList<Integer>
torna - se apenas ArrayList
no bytecode. Isso significa que eles parecem ser exatamente do mesmo tipo em tempo de execução. Aparentemente, em C #, eles são de tipos diferentes.