¿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.
nulldevolver 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.Emptysi es nulo.
Convert.ToString(string value)devuelve nullsi el argumento es null. Convert.ToString(object value)devuelve String.Emptysi el argumento es null.
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
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 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.
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.
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 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().
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.ToStringno 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: 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.
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.
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)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
La función Convert.Tostring () maneja el NULL mientras que el método .ToString () no. visite aquí .