Soy un novato de C # y acabo de encontrar un problema. Existe una diferencia entre C # y Java cuando se trata del operador ternario ( ? :
).
En el siguiente segmento de código, ¿por qué no funciona la cuarta línea? El compilador muestra un mensaje de error de there is no implicit conversion between 'int' and 'string'
. La quinta línea no funciona tan bien. Ambos List
son objetos, ¿no?
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
Sin embargo, el mismo código funciona 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
¿Qué característica de lenguaje en C # falta? Si existe, ¿por qué no se agrega?
int
no es un objeto. Es un primitivo.
ArrayList<String>
y se ArrayList<Integer>
convierte solo ArrayList
en el código de bytes. Esto significa que parecen ser exactamente del mismo tipo en tiempo de ejecución. Aparentemente en C # son de diferentes tipos.