Pregunta

quiero saber el encasillamiento en c# .net, que tengo debajo de líneas de código.

int i=4
object o = i // This works properly without any typecasting becausing boxing takes place automatically
string s= i // This does not work, even when the string is also reference type?
string s=(string)i //This also does not work even if i try to typecast the int to string.
string s= Convert.ToString(i); // this works.

quiero saber por qué string s = i and string s = (string)i no funciona y cuál es la diferencia en el uso de (string)i, i.ToString(), and Convert.ToString(i).

¿Fue útil?

Solución

Cuando se trata de boxing y unboxing, tipos explícitos e implícitos de la fundición.Así, en algunas circunstancias, es bastante fácil para que el tiempo de ejecución para permitir la conversión implícita entre dos tipos admitidos, es decir, una Int32 a un Doble.Sin embargo, no hay ninguna conversión implícita o explícita entre un entero y una cadena, porque, obviamente, una cadena no es un número entero (a pesar del hecho de que una cadena puede contener caracteres para un entero).

string s = i; // attempt at implicit cast from Int32 to String, error
object o = i; // all types inherit from Object, so you may implicitly or explicitly cast from Int32 to Object.
s = (string)i; // attempt at explicit cast from Int32 to string, error
s = i.ToString(); // conversion
s = Convert.ToString(i); // conversion

Que es donde Convert viene a jugar. Convert contiene soporte para intentar convertir conocido primitivas (y los tipos de apoyo IConvertable) a otro.Así, ToString o Convert.ToString sería el preferido de los métodos (ToString y Convertir.ToString son prácticamente sinónimos, salvo que ToString te da algunas opciones de formato).

Otros consejos

Bien, string y object - ambos son tipos de referencia.Sin embargo, object es un tipo de raíz para todos .Tipos de redes.

Cuando se utiliza esta sintaxis (string)i, usted está tratando de uso explícito de la conversión entre tipos.Pero este tipo de conversión requiere string clase de saber acerca de todos los posibles tipos de argumento.

Así tenemos .ToString() el método, que puede ser anulada en cualquier clase, y su valor de retorno se utiliza como una cadena represenation de cualquier objeto.

cadena s= i y string s= (cadena) No funciona

Porque no es una cadena, y el tipo de fundición es un elenco del tipo, no una conversión.Solo funciona si contigo una cadena o una subclase de cadena (que no es posible para las cadenas, pero puede ser para otras clases).

Cuál es la diferencia en el uso (cadena) i, i.tostring () y convertir.Tostring (I).

  • (cadena) i: LOST I a una cadena, debe estar asignable.

  • i.Tostring (): llama al método TOSSTRING, que es defiende en el sistema.Object, por lo tanto, disponible en todas las clases y estructuras, pero no devuelve contenido sensato si no se sobrescribe.

  • Convert.Tostring (i): Coonverts i a una cadena.Esto incluye llamar a un convertidor que probablemente solo llama a Tostring en este caso raro.

    Al final, la fundición no es la aconversión.Para (Cadena) i para trabajar, tengo que ser una cadena, mientras que convertir intentos para hacerlo una cadena.

Puede especificar conversiones implícitas y explícitas en .NET, la razón por la que la cadena S= i falla es que no hay una operación de fundición incorporada para un entero en una cadena.

Consulte este MSDN Artículo en la fundición para más información

string s= i no funciona porque los tipos no coinciden, int no entrará en una cadena.

string s=(string)i no funciona porque no puede asumir qué tipo de conversión se debe usar (es decir, qué base)

Algo, como s = ""+i, funcionaría por otro lado, ya que conversión de la base 10 de la base.

quiero saber por qué string s = i y string s = (string)i no funciona

La respuesta corta es que no hay implícito (primer ejemplo), ni explícita (segundo ejemplo) fundición de int a string definido.Ligeramente más larga respuesta;durante la creación de la estructura Int32 en C# no comportamiento de casting fue programado para permitir que el desarrollador automágicamente elenco de int a string

cuál es la diferencia en el uso de (string)i, i.ToString(), y Convert.ToString(i)

Bueno, la primera no;t trabajo como usted ha dicho, y como he explicado anteriormente.El segundo se llama a la ToString método en la estructura Int32, que devuelve (como el nombre indica) una representación de cadena del objeto.Cabe señalar que esta es una nueva cadena, no es de ninguna manera relacionada con el valor original.El tercer ejemplo Convert.ToString no será, bajo el capó, la convocatoria cualquiera que sea la forma más adecuada para activar el parámetro que se pasa a una cadena más probable es que simplemente llama a la ToString método - de manera casi idéntica a la del ejemplo 2.

El método

ToString() es anular cada referencia, que es un método vitional en la clase de objeto.Las calss de cadena anulan ese método y proporcionan valor de cadena de esto.

La implementación predeterminada del método TOSTRING devuelve el nombre completo del tipo del objeto, ya que se muestra el siguiente ejemplo.

 Object obj = new Object();
      Console.WriteLine(obj.ToString());

// The example displays the following output:
//      System.Object

Este comportamiento se hereda por tipos de referencia que no anulan el método de tostración.

TypeCasting en C # solo funciona a lo largo de las líneas de la herencia de la clase.El objeto es la raíz de todos los tipos en C # y, por lo tanto, todos los valores pueden ser tipsast a él.

string y int no comparte la misma rama de herencia y, por lo tanto, no se puede moldear directamente de uno a otro.

Convert.ToString() es un método diseñado para convertir un entero a una cadena: no hay ningún tipo de clasificación, solo está ejecutando un método diseñado para convertir un número entero en una representación de cadena.

i.ToString() Realiza la funcionalidad equivalente a Convert.ToString(), excepto que i.ToString() tiene sobrecargas que permiten una mayor flexibilidad en la representación del número en formato de cadena.

Una última nota, el desarrollador puede incluir excepciones a las reglas de mecanografía utilizando un método public static explicit operator que permite al desarrollador convertir un valor a otro, ya que se encuentran en forma.

Lo primero a tener en cuenta es que cada clase se deriva del objeto.

Eligiendo int a objetar es usar un INT32.

Cadena de fundición al objeto está usando una cadena.

No hay un reparto implícito de un entero a una cadena porque están en diferentes partes de la jerarquía de clase: uno no se relaciona de ninguna manera con otro.Sin embargo, debido a que la cadena se usa tan a menudo para el objeto de salida (y, por lo tanto, todos sus hijos) tienen un método de tostración () para su conveniencia.

Sin embargo, convertir está escrito específicamente para poder convertir de un tipo a otro, por ejemplo, convertir. TOBOBOOL (X) puede analizar "verdadero" o "Falso" a Boolean, y como lo ha demostrado puede convertir un número entero paraUna cadena: otra vez, esta es realmente una conveniencia que probablemente solo llama a int32.tostring () debajo de la capucha.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top