¿Cuál es la diferencia entre Convert.ToString()
y .ToString()
?
Encontré muchas diferencias en línea, pero ¿cuál es la principal diferencia?
¿Cuál es la diferencia entre Convert.ToString()
y .ToString()
?
Encontré muchas diferencias en línea, pero ¿cuál es la principal diferencia?
Respuestas:
Convert.ToString()
maneja null
, mientras ToString()
que no.
null
devolver una cadena vacía o lanzar una excepción? Es como la diferencia entre lanzar y usar as
: conversión silenciosa.
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.Empty
si es nulo.
Convert.ToString(string value)
devuelve null
si el argumento es null
. Convert.ToString(object value)
devuelve String.Empty
si el argumento es null
.
Además de otras respuestas sobre el manejo de null
valores, Convert.ToString
intenta usar IFormattable
e IConvertible
interfaces 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
IConvertible
tiene prioridad sobre IFormattable
, que a su vez tiene prioridad sobre la Object.ToString()
implementación.
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 i
usando i.ToString ()
o Convert.ToString
. Entonces, ¿cuál es la diferencia?
La diferencia básica entre ellos es que la Convert
funció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 convert
siempre es seguro.
Puede crear una clase y anular el toString
método para hacer lo que quiera.
Por ejemplo, puede crear una clase "MyMail" y anular el toString
método para enviar un correo electrónico o realizar alguna otra operación en lugar de escribir el objeto actual.
El Convert.toString
Convierte el valor especificado la representación de cadena equivalente.
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.
Devuelve una cadena que representa el objeto actual.
null
, ""
O "null"
?
En Convert.ToString()
, la conversión maneja un NULL
valor o no, pero .ToString()
no maneja un NULL
valor y un NULL
error de excepción de referencia. Por lo tanto, es una buena práctica usarlo Convert.ToString()
.
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)
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);
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();
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.ToString
no manejan Null Exception
. simplemente lo hace:return value == null ? string.Empty : value.ToString()
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: Convert
manejadores de funciones NULL
, mientras i.ToString()
que no arrojará un NULL reference exception error.
As, ya que una buena práctica de codificación convert
siempre 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.
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 null
entonces 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 null
si, por ejemplo, value.ToString()
devuelve nulo.
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.
class System.Object
{
public string ToString(IFormatProvider provider)
{
return Number.FormatInt32(this, null, NumberFormatInfo.GetInstance(provider));
}
}
class System.Convert
{
public static string ToString(object value)
{
return value.ToString(CultureInfo.CurrentCulture);
}
}
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.
Convert.Tostring()
básicamente solo llama a lo siguiente value == null ? String.Empty: value.ToString()
(string)variable
só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
La función Convert.Tostring () maneja el NULL mientras que el método .ToString () no. visite aquí .