Diferença entre Convert.ToString () e .ToString ()


158

Qual é a diferença entre Convert.ToString()e .ToString()?

Encontrei muitas diferenças online, mas qual é a principal diferença?


7
Você diz que tem muitas diferenças na web e depois pergunta se é apenas por esse motivo específico? O que mais você encontrou na web?
Ryan

3
Convert.ToString () possui uma sobrecarga que permite usar CultureInfo, enquanto .ToString () não possui essa sobrecarga.
Artemix

Respostas:


232

Convert.ToString()alças null, enquanto ToString()não.


3
bom .. Por esse motivo específico, apenas eles estão usando. dois métodos?
TinTin

Além disso, semi-relacionado, consulte esta resposta para obter mais detalhes: stackoverflow.com/questions/496096/…
JYelton

Mais informações sobre as diferenças usando o JustDecompile / Reflector: kodefuguru.com/post/2011/06/14/…
Ubikuity

5
Deseja nullretornar uma string vazia ou lançar uma exceção? É como a diferença entre transmitir e usar as: conversão silenciosa.
styfle

@Ubikuity: a ligação é interrompida
hdoghmen

64

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.Emptyse for nulo.


var arg = Request.Params.Get ("__ EVENTARGUMENT"); string _arg = Convert.ToString (arg); _arg não está returing String.Empty quando arg é nulo. porque?
vml19

2
@ Nilaa, talvez você queira abrir outra pergunta, ao invés de comentar. Minha primeira pergunta é o que ele retorna quando arg é nulo? Meu primeiro pensamento é que "arg" já é do tipo "string", então você está chamando a sobrecarga de Convert.ToString (...), que apenas retorna o que você passa para ele. Essa discussão é relativa à sobrecarga de "objeto" do método.
Chris Dwyer

4
@ Roshe Sim, eu só fiquei com isso. Convert.ToString(string value)retorna nullse o argumento for null. Convert.ToString(object value)retorna String.Emptyse o argumento for null.
Tim Goodman

22

Além de outras respostas sobre como manipular nullvalores, Convert.ToStringtenta usar IFormattablee fazer IConvertibleinterfaces 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

1
Isso deve ser adicionado à resposta correta, porque é uma informação bastante importante.
Santhos 14/12/15

2
Assim como um suplemento - a base na fonte de referência IConvertible tem precedência IFormattable, o que, por sua vez, tem precedência sobre a Object.ToString()implementação.
Grx70

11

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 iusandoi.ToString () ou Convert.ToString. Então qual a diferença?

A diferença básica entre eles é que a Convertfunçã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.


11
você exemplo é um pouco inválido como int nunca pode ser nulo
miket

6

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 toStringmétodo para enviar um email ou executar outra operação em vez de escrever o objeto atual.

O Convert.toStringconverte o valor especificado em sua representação de sequência equivalente.


2
Convert.ToString, na verdade, é um método seguro que verifica nulo e, se o valor não for nulo, ele simplesmente chama o método ToString. Portanto, em qualquer caso, se você tiver substituído o método ToString, seu método substituído ToString será chamado.
ZafarYousafi

E essa segurança nula só ajuda se você estiver lidando com classes. Os tipos de valor não podem ser nulos e, portanto, podemos chamar com segurança o 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

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.

Object.ToString

Retorna uma string que representa o objeto atual.


"imprime nada"? o que não é nada? null, ""Ou "null"?
weston

3

Em Convert.ToString(), o Convert manipula um NULLvalor ou não, mas .ToString()nele não manipula um NULLvalor e um NULLerro de exceção de referência. Portanto, é uma boa prática usar Convert.ToString().


3

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)

1
Estou bastante satisfeito com sua resposta. Portanto, +1. Obrigado.
Ashok kumar

3

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);

2

ToString()não pode manipular valores nulos e convert.ToString()pode manipular valores nulos; portanto, quando você deseja que seu sistema manipule o uso de valores nulos convert.ToString().


2

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();


2
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.ToStringnão manuseie Null Exception. simplesmente faz:return value == null ? string.Empty : value.ToString()
Fabio

0

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 Convertfunção manipula NULL, enquanto i.ToString()isso não gera um NULL reference exception error.So, pois as boas práticas de codificação convertsã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.

0

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 nullretornado string.Empty. Como último recurso, retorneobj.ToString() se nada mais funcionar.

Vale ressaltar que Convert.ToString(value) pode retornar nullse, por exemplo, value.ToString()retornar nulo.

Consulte Fonte de referência .Net


0

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.

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

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.


0
  • Convert.Tostring() basicamente chama apenas o seguinte value == null ? String.Empty: value.ToString()

  • (string)variableserá 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


-1

A função Convert.Tostring () lida com o NULL, enquanto o método .ToString () não. visite aqui .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.