Diferencia entre Convert.ToString () y .ToString ()


158

¿Cuál es la diferencia entre Convert.ToString()y .ToString()?

Encontré muchas diferencias en línea, pero ¿cuál es la principal diferencia?


77
¿Dices que tienes muchas diferencias en la web y luego preguntas si es solo por esta razón específica? ¿Qué más encontraste en la web?
Ryan

3
Convert.ToString () tiene una sobrecarga que permite usar CultureInfo, mientras que .ToString () no tiene tal sobrecarga.
Artemix

Respuestas:


232

Convert.ToString()maneja null, mientras ToString()que no.


3
bueno .. Por esta razón específica solo ellos usan. dos metodos?
TinTin

Además, semi-relacionado, vea esta respuesta para más detalles: stackoverflow.com/questions/496096/…
JYelton

Más información sobre las diferencias usando JustDecompile / Reflector: kodefuguru.com/post/2011/06/14/…
Ubikuity

55
¿Quieres nulldevolver una cadena vacía o lanzar una excepción? Es como la diferencia entre lanzar y usar as: conversión silenciosa.
styfle

@Ubikuity: el enlace está roto
hdoghmen

64

Llamar ToString()a un objeto supone que el objeto no es nulo (ya que un objeto debe existir para llamar a un método de instancia). Convert.ToString(obj)no necesita suponer que el objeto no es nulo (ya que es un método estático en la clase Convert), sino que volverá String.Emptysi es nulo.


var arg = Request.Params.Get ("__ EVENTARGUMENT"); string _arg = Convert.ToString (arg); _arg no está recuperando String.Empty cuando arg es nulo. ¿por qué?
vml19

2
@Nilaa, es posible que desee abrir otra pregunta haciendo esto, en lugar de hacer un comentario. Mi primera pregunta es ¿qué hace que vuelva cuando arg es nulo? Mi primer pensamiento es que "arg" en realidad ya es del tipo "string", por lo que está llamando a la sobrecarga de Convert.ToString (...), que simplemente devuelve lo que le pasa. Esta discusión se refiere a la sobrecarga del "objeto" del método.
Chris Dwyer

44
@Roshe Sí, acabo de morder por esto. Convert.ToString(string value)devuelve nullsi el argumento es null. Convert.ToString(object value)devuelve String.Emptysi el argumento es null.
Tim Goodman

22

Además de otras respuestas sobre el manejo de nullvalores, Convert.ToStringintenta usar IFormattablee IConvertibleinterfaces antes de llamar a base Object.ToString.

Ejemplo:

class FormattableType : IFormattable
{
    private double value = 0.42;

    public string ToString(string format, IFormatProvider formatProvider)
    {
        if (formatProvider == null)
        {
            // ... using some IOC-containers
            // ... or using CultureInfo.CurrentCulture / Thread.CurrentThread.CurrentCulture
            formatProvider = CultureInfo.InvariantCulture;
        }

        // ... doing things with format
        return value.ToString(formatProvider);
    }

    public override string ToString()
    {
        return value.ToString();
    }
}

Resultado:

Convert.ToString(new FormattableType()); // 0.42
new FormattableType().ToString();        // 0,42

1
Esto debe agregarse a la respuesta correcta porque es información bastante importante.
Santhos

2
Solo como un suplemento: basarse en la fuente de referencia IConvertible tiene prioridad sobre IFormattable, que a su vez tiene prioridad sobre la Object.ToString()implementación.
Grx70

11

Vamos a entender la diferencia a través de este ejemplo:

int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));

Podemos convertir el entero iusando i.ToString ()o Convert.ToString. Entonces, ¿cuál es la diferencia?

La diferencia básica entre ellos es que la Convertfunción maneja NULLS mientras i.ToString ()que no; arrojará un error de excepción de referencia NULL. Entonces, como una buena práctica de codificación, el uso convertsiempre es seguro.


11
su ejemplo es un poco inválido ya que int nunca puede ser nulo
MikeT

6

Puede crear una clase y anular el toStringmétodo para hacer lo que quiera.

Por ejemplo, puede crear una clase "MyMail" y anular el toStringmétodo para enviar un correo electrónico o realizar alguna otra operación en lugar de escribir el objeto actual.

El Convert.toStringConvierte el valor especificado la representación de cadena equivalente.


2
Convert.ToString en realidad es un método seguro que comprueba si es nulo y, si el valor no es nulo, simplemente llama al método ToString. En cualquier caso, si ha anulado el método ToString, se llamará a su método anulado ToString.
ZafarYousafi

Y esta seguridad nula solo ayuda si se trata de clases. Los tipos de valor no pueden ser nulos, por lo que podemos invocar de forma segura el método ToString.
ZafarYousafi

5
object o=null;
string s;
s=o.toString();
//returns a null reference exception for string  s.

string str=convert.tostring(o);
//returns an empty string for string str and does not throw an exception.,it's 
//better to use convert.tostring() for good coding

4

Los métodos son "básicamente" los mismos, excepto el manejo nulo .

Pen pen = null; 
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException

Desde MSDN:
Método Convert.ToString

Convierte el valor especificado en su representación de cadena equivalente.

Object.ToString

Devuelve una cadena que representa el objeto actual.


"no imprime nada"? que es nada null, ""O "null"?
Weston

3

En Convert.ToString(), la conversión maneja un NULLvalor o no, pero .ToString()no maneja un NULLvalor y un NULLerror de excepción de referencia. Por lo tanto, es una buena práctica usarlo Convert.ToString().


3

Para los amantes del código, esta es la mejor respuesta.

    .............. Un Safe code ...................................
    Try
        ' In this code we will get  "Object reference not set to an instance of an object." exception
        Dim a As Object
        a = Nothing
        a.ToString()
    Catch ex As NullReferenceException
        Response.Write(ex.Message)
    End Try


    '............... it is a safe code..............................
    Dim b As Object
    b = Nothing
    Convert.ToString(b)

1
Estoy bastante satisfecho con tu respuesta. Por lo tanto, +1. Gracias.
Ashok kumar

3

Estoy de acuerdo con la respuesta de @ Ryan . Por cierto, comenzando con C # 6.0 para este propósito, puede usar:

someString?.ToString() ?? string.Empty;

o

$"{someString}"; // I do not recommend this approach, although this is the most concise option.

en vez de

Convert.ToString(someString);

2

ToString()no puede manejar valores nulos y convert.ToString()puede manejar valores que son nulos, por lo tanto, cuando desea que su sistema maneje el uso de valores nulos convert.ToString().


2

Convert.ToString(strName)manejará valores nulos y strName.Tostring()no manejará valores nulos y lanzará una excepción.

Entonces es mejor usar Convert.ToString()entonces.ToString();


2
ToString() Vs Convert.ToString()

Similitudes: -

Ambos se utilizan para convertir un tipo específico a cadena, es decir, int a cadena, flotante a cadena o un objeto a cadena.

Diferencia: -

ToString()no puede manejar nulo mientras que en caso de Convert.ToString()manejará valor nulo.

Ejemplo:

namespace Marcus
{
    class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    class Startup
    {
        public static void Main()
        {
            Employee e = new Employee();
            e = null;

            string s = e.ToString(); // This will throw an null exception
            s = Convert.ToString(e); // This will throw null exception but it will be automatically handled by Convert.ToString() and exception will not be shown on command window.
        }
    }
}

Convert.ToStringno manejan Null Exception. simplemente lo hace:return value == null ? string.Empty : value.ToString()
Fabio

0

Para comprender ambos métodos, tomemos un ejemplo:

int i =0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i)); 

Aquí, ambos métodos se utilizan para convertir la cadena, pero la diferencia básica entre ellos es: Convertmanejadores de funciones NULL, mientras i.ToString()que no arrojará un NULL reference exception error.As, ya que una buena práctica de codificación convertsiempre es segura.

Veamos otro ejemplo:

string s;
object o = null;
s = o.ToString(); 
//returns a null reference exception for s. 

string s;
object o = null;
s = Convert.ToString(o); 
//returns an empty string for s and does not throw an exception.

0

Convert.ToString(value)primero intenta lanzar obj a IConvertible , luego IFormattable para llamar a los ToString(...)métodos correspondientes . Si, en cambio, el valor del parámetro fue nullentonces return string.Empty. Como último recurso, regrese obj.ToString()si nada más funcionó.

Vale la pena señalar que Convert.ToString(value) puede regresar nullsi, por ejemplo, value.ToString()devuelve nulo.

Ver fuente de referencia .Net


0

Escribí este código y lo compilé.

class Program
{
    static void Main(string[] args)
    {
        int a = 1;
        Console.WriteLine(a.ToString());
        Console.WriteLine(Convert.ToString(a));
    }
}

Al usar 'ingeniería inversa' ( ilspy ) descubro que 'object.ToString ()' y 'Convert.ToString (obj)' hacen exactamente una cosa. de hecho 'Convert.ToString (obj)' call 'object.ToString ()' entonces 'object.ToString ()' es más rápido.

Método Object.ToString :

class System.Object
{
    public string ToString(IFormatProvider provider)
    {
        return Number.FormatInt32(this, null, NumberFormatInfo.GetInstance(provider));
    }
}

Método Conver.ToString :

class System.Convert
{
    public static string ToString(object value)
    {
        return value.ToString(CultureInfo.CurrentCulture);
    }
}

0

En C # si declara una variable de cadena y si no asigna ningún valor a esa variable, entonces, de manera predeterminada, esa variable toma un valor nulo. En tal caso, si utiliza el método ToString (), su programa arrojará la excepción de referencia nula. Por otro lado, si usa el método Convert.ToString (), su programa no arrojará una excepción.


0
  • Convert.Tostring() básicamente solo llama a lo siguiente value == null ? String.Empty: value.ToString()

  • (string)variablesólo fundido cuando hay una implícita o explícita del operador en lo que usted está echando

  • ToString()puede ser anulado por el tipo (tiene control sobre lo que hace), si no da como resultado el nombre del tipo

Obviamente, si un objeto es nulo , no puede acceder al miembro de la instancia ToString(), causará una excepción


-1

La función Convert.Tostring () maneja el NULL mientras que el método .ToString () no. visite aquí .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.