Apa perbedaan antara Convert.ToString()
dan .ToString()
?
Saya menemukan banyak perbedaan online, tetapi apa perbedaan utama?
Apa perbedaan antara Convert.ToString()
dan .ToString()
?
Saya menemukan banyak perbedaan online, tetapi apa perbedaan utama?
Jawaban:
Convert.ToString()
menangani null
, sementara ToString()
tidak.
null
mengembalikan string kosong atau melemparkan pengecualian? Ini seperti perbedaan antara casting dan menggunakan as
: konversi diam.
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.Empty
jika adalah nol.
Convert.ToString(string value)
kembali null
jika argumennya adalah null
. Convert.ToString(object value)
kembali String.Empty
jika argumennya adalah null
.
Selain jawaban lain tentang penanganan null
nilai, Convert.ToString
coba gunakan IFormattable
dan IConvertible
antarmuka 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
IConvertible
diutamakan IFormattable
, yang pada gilirannya mengambil prioritas di atas Object.ToString()
implementasi.
Mari kita mengerti perbedaannya melalui contoh ini:
int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));
Kami dapat mengonversi bilangan bulat i
menggunakan i.ToString ()
atau Convert.ToString
. Jadi apa bedanya?
Perbedaan mendasar di antara mereka adalah Convert
fungsi menangani NULLS sementara i.ToString ()
tidak; itu akan melempar kesalahan pengecualian referensi NULL. Jadi praktik pengkodean yang baik menggunakan convert
selalu aman.
Anda bisa membuat kelas dan mengganti toString
metode untuk melakukan apa pun yang Anda inginkan.
Misalnya - Anda dapat membuat kelas "MyMail" dan mengganti toString
metode untuk mengirim email atau melakukan operasi lain alih-alih menulis objek saat ini.
The Convert.toString
mengkonversi nilai tertentu untuk representasi string yang setara.
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.
Mengembalikan string yang mewakili objek saat ini.
null
, ""
atau "null"
?
Di Convert.ToString()
, Konversi menangani NULL
nilai atau tidak tetapi di .ToString()
dalamnya tidak menangani NULL
nilai dan NULL
kesalahan pengecualian referensi. Jadi itu adalah praktik yang baik untuk digunakan Convert.ToString()
.
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)
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);
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();
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.ToString
jangan menangani Null Exception
. itu cukup:return value == null ? string.Empty : value.ToString()
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: Convert
fungsi menangani NULL
, sementara i.ToString()
tidak itu akan membuang NULL reference exception error.
Jadi sebagai praktik pengkodean yang baik menggunakan convert
selalu 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.
Convert.ToString(value)
pertama mencoba casting obj ke IConvertible , lalu IFormattable untuk memanggil ToString(...)
metode yang sesuai . Jika bukan nilai parameter itu null
kemudian kembali string.Empty
. Sebagai upaya terakhir, kembalilah obj.ToString()
jika tidak ada yang berhasil.
Perlu dicatat bahwa Convert.ToString(value)
dapat mengembalikan null
jika misalnya value.ToString()
mengembalikan null.
Lihat sumber referensi .Net
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.
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);
}
}
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.
Convert.Tostring()
pada dasarnya hanya memanggil yang berikut ini value == null ? String.Empty: value.ToString()
(string)variable
hanya 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
Fungsi Convert.Tostring () menangani NULL sedangkan metode .ToString () tidak. kunjungi di sini .