Qual é a diferença entre Convert.ToString()
e .ToString()
?
Encontrei muitas diferenças online, mas qual é a principal diferença?
Qual é a diferença entre Convert.ToString()
e .ToString()
?
Encontrei muitas diferenças online, mas qual é a principal diferença?
Respostas:
Convert.ToString()
alças null
, enquanto ToString()
não.
null
retornar uma string vazia ou lançar uma exceção? É como a diferença entre transmitir e usar as
: conversão silenciosa.
A chamada ToString()
de um objeto pressupõe que o objeto não seja nulo (já que um objeto precisa existir para chamar um método de instância). Convert.ToString(obj)
não precisa presumir que o objeto não é nulo (como é um método estático na classe Convert), mas retornará String.Empty
se for nulo.
Convert.ToString(string value)
retorna null
se o argumento for null
. Convert.ToString(object value)
retorna String.Empty
se o argumento for null
.
Além de outras respostas sobre como manipular null
valores, Convert.ToString
tenta usar IFormattable
e fazer IConvertible
interfaces antes de chamar a base Object.ToString
.
Exemplo:
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
tem precedência IFormattable
, o que, por sua vez, tem precedência sobre a Object.ToString()
implementação.
Vamos entender a diferença através deste exemplo:
int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Podemos converter o número inteiro i
usandoi.ToString ()
ou Convert.ToString
. Então qual a diferença?
A diferença básica entre eles é que a Convert
função manipula NULLS enquanto i.ToString ()
não; ele lançará um erro de exceção de referência NULL. Portanto, como uma boa prática de codificação, o uso convert
é sempre seguro.
Você pode criar uma classe e substituir o toString
método para fazer o que quiser.
Por exemplo, você pode criar uma classe "MyMail" e substituir o toString
método para enviar um email ou executar outra operação em vez de escrever o objeto atual.
O Convert.toString
converte o valor especificado em sua representação de sequência equivalente.
Os métodos são "basicamente" os mesmos, exceto manipulação nula .
Pen pen = null;
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException
Do MSDN:
Método Convert.ToString
Converte o valor especificado em sua representação de seqüência equivalente.
Retorna uma string que representa o objeto atual.
null
, ""
Ou "null"
?
Em Convert.ToString()
, o Convert manipula um NULL
valor ou não, mas .ToString()
nele não manipula um NULL
valor e um NULL
erro de exceção de referência. Portanto, é uma boa prática usar Convert.ToString()
.
Para os amantes do código, esta é a melhor resposta.
.............. 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)
Eu concordo com a resposta de @ Ryan . A propósito, começando com o C # 6.0 para esse fim, você pode usar:
someString?.ToString() ?? string.Empty;
ou
$"{someString}"; // I do not recommend this approach, although this is the most concise option.
ao invés de
Convert.ToString(someString);
Convert.ToString(strName)
manipulará valores nulos e strName.Tostring()
não manipulará valores nulos e lançará uma exceção.
Então é melhor usar Convert.ToString()
então.ToString();
ToString() Vs Convert.ToString()
Semelhanças: -
Ambos são usados para converter um tipo específico em string, ou seja, int em string, flutuar em string ou um objeto em string.
Diferença :-
ToString()
não pode manipular nulo enquanto no caso com Convert.ToString()
manipulará valor nulo.
Exemplo:
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
não manuseie Null Exception
. simplesmente faz:return value == null ? string.Empty : value.ToString()
Para entender os dois métodos, vamos dar um exemplo:
int i =0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Aqui, os dois métodos são usados para converter a string, mas a diferença básica entre eles é: a Convert
função manipula NULL
, enquanto i.ToString()
isso não gera um NULL reference exception error.
So, pois as boas práticas de codificação convert
são sempre seguras.
Vamos ver outro exemplo:
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)
primeiro tenta lançar obj para IConvertible , depois IFormattable para chamar os ToString(...)
métodos correspondentes . Se, em vez disso, o valor do parâmetro foi null
retornado string.Empty
. Como último recurso, retorneobj.ToString()
se nada mais funcionar.
Vale ressaltar que Convert.ToString(value)
pode retornar null
se, por exemplo, value.ToString()
retornar nulo.
Consulte Fonte de referência .Net
eu escrevi este código e compilei.
class Program
{
static void Main(string[] args)
{
int a = 1;
Console.WriteLine(a.ToString());
Console.WriteLine(Convert.ToString(a));
}
}
usando 'engenharia reversa' ( ilspy ), descubro 'object.ToString ()' e 'Convert.ToString (obj)' fazem exatamente uma coisa. de fato 'Convert.ToString (obj)' chame 'object.ToString ()' so 'object.ToString ()' é mais 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);
}
}
Em C #, se você declarar uma variável de sequência e se não atribuir nenhum valor a essa variável, por padrão, essa variável assumirá um valor nulo. Nesse caso, se você usar o método ToString (), seu programa lançará a exceção de referência nula. Por outro lado, se você usar o método Convert.ToString (), seu programa não lançará uma exceção.
Convert.Tostring()
basicamente chama apenas o seguinte value == null ? String.Empty: value.ToString()
(string)variable
será transmitido somente quando houver um operador implícito ou explícito no que você está transmitindo
ToString()
pode ser substituído pelo tipo (ele tem controle sobre o que faz); caso contrário, resulta no nome do tipo
Obviamente, se um objeto for nulo , você não poderá acessar o membro da instância ToString()
, ele causará uma exceção
A função Convert.Tostring () lida com o NULL, enquanto o método .ToString () não. visite aqui .