Perbedaan antara Convert.ToString () dan .ToString ()


158

Apa perbedaan antara Convert.ToString()dan .ToString()?

Saya menemukan banyak perbedaan online, tetapi apa perbedaan utama?


7
Anda mengatakan Anda punya banyak perbedaan di web dan kemudian Anda bertanya apakah hanya karena alasan spesifik ini? Apa lagi yang Anda temukan di web?
Ryan

3
Convert.ToString () memiliki kelebihan yang memungkinkan untuk menggunakan CultureInfo, sementara .ToString () tidak memiliki kelebihan seperti itu.
Artemix

Jawaban:


232

Convert.ToString()menangani null, sementara ToString()tidak.


3
bagus .. Untuk alasan khusus ini hanya mereka yang menggunakan. dua metode?
TinTin

Selain itu, yang terkait, lihat jawaban ini untuk detail lebih lanjut: stackoverflow.com/questions/496096/…
JYelton

Informasi lebih lanjut tentang perbedaan menggunakan JustDecompile / Reflector: kodefuguru.com/post/2011/06/14/…
Ubikuity

5
Apakah Anda ingin nullmengembalikan string kosong atau melemparkan pengecualian? Ini seperti perbedaan antara casting dan menggunakan as: konversi diam.
styfle

@Ubikuity: tautannya rusak
hdoghmen

64

Memanggil ToString()suatu objek mengandaikan bahwa objek tersebut bukan nol (karena suatu objek perlu ada untuk memanggil metode instance di atasnya). Convert.ToString(obj)tidak perlu menganggap objek tidak null (karena merupakan metode statis pada kelas Convert), tetapi sebaliknya akan kembali String.Emptyjika adalah nol.


var arg = Request.Params.Get ("__ EVENTARGUMENT"); string _arg = Convert.ToString (arg); _arg tidak menyimpan String.Empty saat arg nol. Mengapa?
vml19

2
@Nilaa Anda mungkin ingin membuka pertanyaan lain yang menanyakan ini, alih-alih dalam komentar. Pertanyaan pertama saya adalah apa yang itu kembali ketika arg adalah null? Pikiran pertama saya adalah bahwa "arg" sebenarnya sudah ketik "string", jadi Anda memanggil kelebihan Convert.ToString (...), yang hanya mengembalikan apa yang Anda berikan padanya. Diskusi ini berkaitan dengan kelebihan "objek" dari metode ini.
Chris Dwyer

4
@ Roshe Ya, saya baru saja mendapat sedikit dari ini. Convert.ToString(string value)kembali nulljika argumennya adalah null. Convert.ToString(object value)kembali String.Emptyjika argumennya adalah null.
Tim Goodman

22

Selain jawaban lain tentang penanganan nullnilai, Convert.ToStringcoba gunakan IFormattabledan IConvertibleantarmuka sebelum memanggil pangkalan Object.ToString.

Contoh:

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

Hasil:

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

1
Ini harus ditambahkan ke jawaban yang benar karena itu informasi yang cukup penting.
Santhos

2
Sama seperti suplemen - mendasarkan pada sumber referensi IConvertible diutamakan IFormattable, yang pada gilirannya mengambil prioritas di atas Object.ToString()implementasi.
Grx70

11

Mari kita mengerti perbedaannya melalui contoh ini:

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

Kami dapat mengonversi bilangan bulat imenggunakan i.ToString ()atau Convert.ToString. Jadi apa bedanya?

Perbedaan mendasar di antara mereka adalah Convertfungsi menangani NULLS sementara i.ToString ()tidak; itu akan melempar kesalahan pengecualian referensi NULL. Jadi praktik pengkodean yang baik menggunakan convertselalu aman.


11
contoh Anda sedikit tidak valid karena int tidak pernah bisa nol
MikeT

6

Anda bisa membuat kelas dan mengganti toStringmetode untuk melakukan apa pun yang Anda inginkan.

Misalnya - Anda dapat membuat kelas "MyMail" dan mengganti toStringmetode untuk mengirim email atau melakukan operasi lain alih-alih menulis objek saat ini.

The Convert.toStringmengkonversi nilai tertentu untuk representasi string yang setara.


2
Convert.ToString sebenarnya adalah metode aman yang memeriksa null dan jika nilainya tidak nol hanya memanggil metode ToString di atasnya. Jadi, dalam hal apa pun, jika Anda memiliki metode ToString utama, metode ToString utama Anda akan dipanggil.
ZafarYousafi

Dan keamanan nol ini hanya membantu jika Anda berurusan dengan kelas. Jenis nilai tidak boleh nol dan kita bisa memanggil metode ToString dengan aman.
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

Metode "pada dasarnya" sama, kecuali menangani null .

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

Dari MSDN:
Metode Convert.ToString

Mengonversi nilai yang ditentukan ke representasi string yang setara.

Object.ToString

Mengembalikan string yang mewakili objek saat ini.


"tidak mencetak apa-apa"? tidak ada apa-apa null, ""atau "null"?
weston

3

Di Convert.ToString(), Konversi menangani NULLnilai atau tidak tetapi di .ToString()dalamnya tidak menangani NULLnilai dan NULLkesalahan pengecualian referensi. Jadi itu adalah praktik yang baik untuk digunakan Convert.ToString().


3

Bagi pecinta Kode, ini adalah jawaban terbaik.

    .............. 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
Saya cukup puas dengan jawaban Anda. Karenanya +1. Terima kasih.
Ashok kumar

3

Saya setuju dengan jawaban @ Ryan . Omong-omong, dimulai dengan C # 6.0 untuk tujuan ini Anda dapat menggunakan:

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

atau

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

dari pada

Convert.ToString(someString);

2

ToString()tidak dapat menangani nilai nol dan convert.ToString()dapat menangani nilai yang nol, jadi ketika Anda ingin sistem Anda menangani penggunaan nilai nol convert.ToString().


2

Convert.ToString(strName)akan menangani nilai null-mampu dan strName.Tostring()tidak akan menangani nilai nol dan melemparkan pengecualian.

Jadi Lebih baik menggunakan Convert.ToString()maka.ToString();


2
ToString() Vs Convert.ToString()

Kesamaan :-

Keduanya digunakan untuk mengkonversi tipe spesifik ke string yaitu int ke string, float ke string atau objek ke string.

Perbedaan :-

ToString()tidak dapat menangani null sementara dalam kasus dengan Convert.ToString()akan menangani nilai nol.

Contoh:

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.ToStringjangan menangani Null Exception. itu cukup:return value == null ? string.Empty : value.ToString()
Fabio

0

Untuk memahami kedua metode ini, mari kita ambil contoh:

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

Di sini kedua metode digunakan untuk mengkonversi string tetapi perbedaan mendasar di antara mereka adalah: Convertfungsi menangani NULL, sementara i.ToString()tidak itu akan membuang NULL reference exception error.Jadi sebagai praktik pengkodean yang baik menggunakan convertselalu aman.

Mari kita lihat contoh lain:

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)pertama mencoba casting obj ke IConvertible , lalu IFormattable untuk memanggil ToString(...)metode yang sesuai . Jika bukan nilai parameter itu nullkemudian kembali string.Empty. Sebagai upaya terakhir, kembalilah obj.ToString()jika tidak ada yang berhasil.

Perlu dicatat bahwa Convert.ToString(value) dapat mengembalikan nulljika misalnya value.ToString()mengembalikan null.

Lihat sumber referensi .Net


0

saya menulis kode ini dan mengkompilasinya.

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

dengan menggunakan 'reverse engineering' ( ilspy ) saya mencari tahu 'object.ToString ()' dan 'Convert.ToString (obj)' melakukan tepat satu hal. Infact 'Convert.ToString (obj)' call 'object.ToString ()' so 'object.ToString ()' lebih cepat.

Object.ToString Method :

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

Conver.ToString Method :

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

0

Dalam C # jika Anda mendeklarasikan variabel string dan jika Anda tidak menetapkan nilai apa pun ke variabel itu, maka secara default variabel itu mengambil nilai nol. Dalam kasus seperti itu, jika Anda menggunakan metode ToString () maka program Anda akan melempar pengecualian referensi nol. Di sisi lain, jika Anda menggunakan metode Convert.ToString () maka program Anda tidak akan memberikan pengecualian.


0
  • Convert.Tostring() pada dasarnya hanya memanggil yang berikut ini value == null ? String.Empty: value.ToString()

  • (string)variablehanya akan memberikan ketika ada operator implisit atau eksplisit pada apa yang Anda casting

  • ToString()dapat ditimpa oleh tipe (ia memiliki kontrol atas apa yang dilakukannya), jika tidak itu menghasilkan nama tipe

Jelas jika suatu objek adalah nol , Anda tidak dapat mengakses anggota instance ToString(), itu akan menyebabkan pengecualian


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.