Różnica między Convert.ToString () i .ToString ()


158

Jaka jest różnica między Convert.ToString()i .ToString()?

Znalazłem wiele różnic w Internecie, ale jaka jest główna różnica?


7
Mówisz, że masz wiele różnic w sieci, a później pytasz, czy to tylko z tego konkretnego powodu? Co jeszcze znalazłeś w sieci?
Ryan

3
Convert.ToString () ma przeciążenie, które pozwala na użycie CultureInfo, podczas gdy .ToString () nie ma takiego przeciążenia.
Artemix

Odpowiedzi:


232

Convert.ToString()uchwyty null, a ToString()nie.


3
dobrze .. Z tego konkretnego powodu używają tylko. dwie metody?
TinTin

Więcej szczegółów znajdziesz w tej odpowiedzi: stackoverflow.com/questions/496096/…
JYelton

Więcej informacji o różnicach przy użyciu JustDecompile / Reflector: kodefuguru.com/post/2011/06/14/…
Ubikuity

5
Czy chcesz nullzwrócić pusty ciąg, czy zgłosić wyjątek? To trochę jak różnica między rzucaniem a używaniem as: cicha konwersja.
styfle

@Ubikuity: link jest uszkodzony
hdoghmen

64

Wywołanie ToString()obiektu zakłada, że ​​obiekt nie jest pusty (ponieważ obiekt musi istnieć, aby wywołać metodę instancji). Convert.ToString(obj)nie musi zakładać, że obiekt nie jest null (ponieważ jest to metoda statyczna w klasie Convert), ale zamiast tego zwróci wartość, String.Emptyjeśli ma wartość null.


var arg = Request.Params.Get ("__ EVENTARGUMENT"); string _arg = Convert.ToString (arg); _arg nie przywraca String.Empty, gdy arg ma wartość null. czemu?
vml19

2
@Nilaa możesz otworzyć inne pytanie, zamiast komentować. Moje pierwsze pytanie brzmi, co nie powróci, gdy Arg jest zerowy? Moją pierwszą myślą jest to, że „arg” jest już typu „string”, więc wywołujesz przeciążenie Convert.ToString (...), które po prostu zwraca to, co do niego przekazujesz. Ta dyskusja dotyczy przeciążenia „obiektu” metody.
Chris Dwyer

4
@Roshe Tak, właśnie zostałem przez to ugryziony. Convert.ToString(string value)zwraca, nulljeśli argumentem jest null. Convert.ToString(object value)zwraca, String.Emptyjeśli argumentem jest null.
Tim Goodman

22

Oprócz innych odpowiedzi dotyczących obsługi nullwartości, Convert.ToStringpróbuje użyć IFormattablei IConvertibleinterfejsów przed wywołaniem base Object.ToString.

Przykład:

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

Wynik:

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

1
Należy to dodać do poprawnej odpowiedzi, ponieważ jest to dość ważna informacja.
Santhos

2
Jako uzupełnienie - oparcie się na źródle referencyjnym IConvertible ma pierwszeństwo przed IFormattable, które z kolei ma pierwszeństwo przed Object.ToString()wdrożeniem.
Grx70

11

Rozumiemy różnicę z tego przykładu:

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

Możemy przekonwertować liczbę całkowitą iza pomocą i.ToString ()lub Convert.ToString. Więc jaka jest różnica?

Podstawowa różnica między nimi polega na tym, że Convertfunkcja obsługuje wartości NULLS, a i.ToString ()nie obsługuje ; zgłosi błąd wyjątku odwołania o wartości NULL. Dlatego dobra praktyka kodowania convertjest zawsze bezpieczna.


11
Twój

6

Możesz utworzyć klasę i zastąpić toStringmetodę, aby zrobiła cokolwiek chcesz.

Na przykład - możesz utworzyć klasę „MyMail” i nadpisać toStringmetodę wysyłania wiadomości e-mail lub wykonać inną operację zamiast pisania bieżącego obiektu.

Convert.toStringKonwertuje Podana wartość jego odpowiednik ciąg znaków.


2
Convert.ToString w rzeczywistości jest bezpieczną metodą, która sprawdza wartość null, a jeśli value nie jest null, po prostu wywołuje metodę ToString. Więc w każdym przypadku, jeśli masz zastąpioną metodę ToString, zostanie wywołana Twoja zastąpiona metoda ToString.
ZafarYousafi

A to zerowe bezpieczeństwo pomaga tylko wtedy, gdy masz do czynienia z zajęciami. Typy wartości nie mogą mieć wartości null, więc możemy bezpiecznie wywołać na nich metodę 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

Metody są „w zasadzie” takie same, z wyjątkiem obsługi wartości null .

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

Z MSDN:
metoda Convert.ToString

Konwertuje określoną wartość na jej równoważną reprezentację w postaci ciągu.

Object.ToString

Zwraca ciąg, który reprezentuje bieżący obiekt.


„nic nie drukuje”? co to jest nic null, ""Lub "null"?
weston

3

W Convert.ToString()programie Convert obsługuje NULLwartość lub nie, ale .ToString()nie obsługuje NULLwartości i NULLbłędu wyjątku odwołania. Więc jest to dobra praktyka w użyciu Convert.ToString().


3

Dla miłośników kodu to najlepsza odpowiedź.

    .............. 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
Jestem bardzo zadowolony z Twojej odpowiedzi. Stąd +1. Dziękuję Ci.
Ashok kumar

3

Zgadzam się z odpowiedzią @ Ryan . Nawiasem mówiąc, zaczynając od C # 6.0 do tego celu możesz użyć:

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

lub

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

zamiast

Convert.ToString(someString);

2

ToString()nie obsługuje wartości null i convert.ToString()może obsługiwać wartości, które są zerowe, więc gdy chcesz, aby system obsługiwał wartości null convert.ToString().


2

Convert.ToString(strName)będzie obsługiwać wartości dopuszczające wartość null i strName.Tostring()nie będzie obsługiwać wartości null i zgłaszać wyjątku.

Więc lepiej Convert.ToString()wtedy użyć.ToString();


2
ToString() Vs Convert.ToString()

Podobieństwa: -

Oba są używane do konwersji określonego typu na łańcuch, tj. Int na string, float na string lub obiekt na string.

Różnica: -

ToString() nie może obsłużyć wartości null w przypadku z Convert.ToString() wartością null.

Przykład:

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.ToStringnie obsługiwać Null Exception. po prostu zrób:return value == null ? string.Empty : value.ToString()
Fabio

0

Aby zrozumieć obie metody, weźmy przykład:

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

Tutaj obie metody są używane do konwersji ciągu, ale podstawowa różnica między nimi jest taka: Convertfunkcja obsługuje NULL, podczas gdy i.ToString()nie spowoduje to wyrzucenia NULL reference exception error.tak dobrej praktyki kodowania przy użyciuconvert są zawsze bezpieczne.

Zobaczmy inny przykład:

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)najpierw próbuje rzutować obj na IConvertible , a następnie IFormattable, aby wywołać odpowiednie ToString(...)metody. Jeśli zamiast tego wartość parametru została nullzwrócona string.Empty. W ostateczności wróć, obj.ToString()jeśli nic innego nie zadziałało.

Warto zaznaczyć, że Convert.ToString(value) może powrócić nullnpvalue.ToString() zwraca null.

Zobacz źródło odniesienia .Net


0

napisałem ten kod i skompilowałem go.

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

używając „inżynierii odwrotnej” ( ilspy ) stwierdzam, że „object.ToString ()” i „Convert.ToString (obj)” robią dokładnie jedną rzecz. infact 'Convert.ToString (obj)' call 'object.ToString ()' więc 'object.ToString ()' jest szybsze.

Metoda Object.ToString :

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

Metoda Conver.ToString :

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

0

W C # jeśli zadeklarujesz zmienną łańcuchową i nie przypiszesz żadnej wartości do tej zmiennej, domyślnie ta zmienna przyjmuje wartość null. W takim przypadku, jeśli użyjesz metody ToString (), Twój program zgłosi wyjątek odwołania zerowego. Z drugiej strony, jeśli użyjesz metody Convert.ToString (), Twój program nie zgłosi wyjątku.


0
  • Convert.Tostring() w zasadzie po prostu wywołuje następujące value == null ? String.Empty: value.ToString()

  • (string)variablebędzie rzutować tylko wtedy, gdy istnieje niejawny lub jawny operator na tym, co rzutujesz

  • ToString()może być nadpisane przez typ (ma kontrolę nad tym, co robi), jeśli nie, to skutkuje nazwą typu

Oczywiście, jeśli obiekt ma wartość null , nie możesz uzyskać dostępu do elementu członkowskiego instancji ToString(), spowoduje to wyjątek


-1

Funkcja Convert.Tostring () obsługuje wartość NULL, podczas gdy metoda .ToString () nie. odwiedź tutaj .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.