¿Cuál es la diferencia entre convertir un int en una cadena y el método ToString () en C #

¿Cuál es la diferencia entre convertir un Int en una cadena y el método ToString ()?

Por ejemplo :-

int MyInt = 10; label1.Text = (string)MyInt; // This Doesn't Work label1.Text = MyInt.ToString(); // but this does. 

Bueno, ToString() es solo una llamada a método que devuelve una cadena. Se define en el object por lo que siempre es válido para invocar cualquier cosa (que no sea una referencia nula).

El operador de reparto puede hacer una de cuatro cosas:

  • Una conversión predefinida, por ejemplo, int a byte
  • Una conversión de referencia de tiempo de ejecución que puede fallar, por ejemplo, fundir el object en la string , que verifica que el objeto de destino sea del tipo apropiado
  • Una conversión definida por el usuario (básicamente llamando a un método estático con un nombre especial) que se conoce en tiempo de comstackción
  • Una conversión de unboxing que puede fallar, por ejemplo, fundir el object en int

En este caso, le está pidiendo al comstackdor que emita código para convertir de int a string . Ninguna de las opciones anteriores se aplica, por lo que obtiene un error de tiempo de comstackción.

La diferencia es que con el elenco, le pides al comstackdor que suponga que el int es, de hecho, una cadena, que no es el caso.

Con ToString (), solicita una representación de cadena para int, que de hecho es una cadena 🙂

Um, ToString () llama a un método que devuelve una representación de cadena del entero.

Cuando echas, no estás devolviendo una representación, estás diciendo que quieres hacer referencia al mismo objeto (bueno, tipo de valor en este caso) pero quieres referenciarlo como un tipo diferente.

Un elenco solo tendrá éxito si el tipo al que se dirige (tipo de destino) es del mismo tipo que el objeto que se está emitiendo o si el tipo de destino es una superclase o interfaz del objeto emitido.

En realidad, es posible realizar la conversión en un molde, siempre que el tipo de origen o destino declare las conversiones implícitas o explícitas, pero el tipo Int32 no hace esto para el tipo de destino Cadena.

El método .ToString () es un método implementado en el tipo System.Object (del que derivan todos los tipos de .NET) y puede anularse en tipos derivados específicos.

Por lo tanto, el tipo “int” tiene su propio método .ToString () que conoce todo sobre las entradas, y cómo convertirlas a una representación de cadena.

Con el molde myint explícito (de cadena), le está pidiendo al comstackdor que convierta / convierta a la fuerza un tipo a otro (en este caso, un int en una cadena). No funciona porque el comstackdor dice que una cadena y un int son tipos incompatibles.

Entonces, el molde explícito falla porque el comstackdor dice que un int no es una cadena, sin embargo, la llamada .ToString () tiene éxito porque el tipo int dice que su valor se puede representar como una cadena, ¡y lo hace!

El método ToString() es uno de los métodos más útiles en progtwigción y muchos otros lenguajes, como Java, tienen el mismo método implementado en el nivel de Object .

Puede definir su propio y la firma en C # debe ser siempre esto:

 public override string ToString() 

Lo que significa que este método anulará el definido en la clase de objeto y devolverá una cadena. En el interior, manipulas tu cuerda de la forma que quieras y luego devuelves el resultado.

Además, la razón específica por la que puede usar ToString en ese entero es porque dentro de C #, los enteros son todas las instancias de Struct Int32 .
Al ver que Int32 está en el mismo nivel de una clase, puede tener sus propios métodos, uno de los cuales es ToString ().

Una cosa más nunca use .ToString () si cree que el objeto puede ser nulo o su aplicación mostrará un ejemplo:

// Emula el problema que podría pasar
objeto obj = null; obj.ToString ();