2009-10-14 15 views
23
object obj = "Hello"; 
string str1 = (string)obj; 
string str2 = obj.ToString(); 

¿Cuál es la diferencia entre (string)obj y obj.ToString()?conversión a String frente llamando ToString

+4

Como mencioné en mi comentario a Guillaume, esto no tiene nada que ver con el boxeo. La cadena es un tipo de referencia; no hay necesidad de boxeo. –

+1

Posible duplicado de [Casting vs Converting an object toString, cuando objeto es realmente una cadena] (http://stackoverflow.com/questions/1170756/casting-vs-converting-an-object-tostring-when-object-really- is-a-string) –

Respuesta

28
  • (string)objcastsobj en un string. obj ya debe ser un string para que esto tenga éxito.
  • obj.ToString() obtiene una representación de cadena de obj llamando al método ToString(). Que es obj sí mismo cuando obj es un string. Esto (nunca) arrojará (n) una excepción.

Por lo tanto, en su caso específico, ambos son equivalentes.

Tenga en cuenta que string es un reference type (en comparación con un value type). Como tal, hereda del objeto y no se produce boxing.

+0

Una cosa a tener en cuenta es que obj, str1 y str2 hacen referencia al mismo objeto. Así que al convertir explícitamente un objeto que es una cadena en una cadena, se devolverá la referencia a objeto en sí misma. –

+5

Un objeto no necesariamente tiene que ser una cadena para que tenga éxito. También funciona si hay un operador de conversión explícito definido. –

+1

Obviamente tiene razón sobre el operador de conversión. Pero por el bien de la no confusión, lo mantendré en los comentarios. Gracias por señalar esto. – Mac

7

En el nivel más básico:

(string)obj intentará emitir obj a un string y se producirá un error si no hay conversión válida.

obj.ToString() devolverá un string que el diseñador de obj ha decidido que representa ese objeto. Por defecto, devuelve el nombre de clase obj.

2

(cadena) obj lanzan el objeto y fallarán si obj no es nulo y no es una cadena.

obj.ToString() convierte obj en una cadena (incluso si no es una cadena), fallará obj es nula ya que es una llamada a método.

1

ToString() es el método de clase de objeto (la clase padre principal en .NET) que puede sobrecargarse en su clase que hereda de la clase de objeto, incluso si no la heredó de ella.

(cadena) es un casting que se puede implementar en la clase en sí mismo, la clase de cadena para que no tenga capacidad en él.

7

Si tiene alguna ayuda, podría utilizar el operador 'as' que es similar al molde, pero devuelve nulo en lugar de una excepción en caso de error de conversión.

string str3 = obj as string; 
Cuestiones relacionadas