it-swarm-id.com

Perbedaan antara Convert.ToDecimal (string) & Decimal.Parse (string)

Apa perbedaan C # antara Convert.ToDecimal(string) dan Decimal.Parse(string)?

Dalam skenario apa Anda akan menggunakan yang satu?

Apa dampaknya terhadap kinerja?

Apa faktor lain yang harus saya pertimbangkan ketika memilih di antara keduanya?

26
YonahW

Dari bytes.com :

Kelas Konversi dirancang untuk Mengonversi berbagai Jenis, sehingga Anda Dapat mengonversi lebih banyak tipe ke Desimal daripada Anda dapat dengan Decimal.Parse, yang dapat hanya berurusan dengan String. Di sisi lain Desimal.Parse memungkinkan Anda untuk Menentukan NumberStyle.

Desimal dan desimal adalah alias dan Sama.

Untuk Convert.ToDecimal (string), Desimal.Parse disebut secara internal.

Morten Wennevik [C # MVP]

Karena Decimal.Parse dipanggil secara internal oleh Convert.ToDecimal, jika Anda memilikiextremepersyaratan kinerja yang mungkin ingin Anda pertahankan pada Decimal.Parse, ini akan menghemat bingkai tumpukan.

39
Guy Starbuck

Ada satu perbedaan penting yang perlu diingat:

Convert.ToDecimal akan mengembalikan 0 jika diberikan string null.

decimal.Parse akan melemparkan ArgumentNullException jika string yang ingin Anda parsing adalah null.

45

Salah satu faktor yang mungkin tidak Anda pikirkan adalah metode Decimal.TryParse. Baik Convert.ToDecimal dan Parse mengeluarkan pengecualian jika mereka tidak dapat mengonversi string ke format desimal yang tepat. Metode TryParse memberi Anda pola Nice untuk validasi input.

decimal result;
if (decimal.TryParse("5.0", out result))
   ; // you have a valid decimal to do as you please, no exception.
else
   ; // uh-oh.  error message time!

Pola ini sangat luar biasa untuk input pengguna pengecekan kesalahan.

15
David J. Sokol

Satu saran umum terkait dengan topik asli - silakan gunakan TryParse() segera setelah Anda tidak benar-benar yakin bahwa parameter string input AKAN menjadi representasi format angka yang benar.

3
dimarzionist

Perbedaan utama antara Convert.ToDecimal(string) dan Decimal.Parse(string) Adalah bahwa Convert menangani Null sedangkan yang lain melempar pengecualian

Catatan: Itu tidak akan menangani string kosong.

1
Taran

Convert.ToDecimal ternyata tidak selalu mengembalikan 0. Dalam pernyataan LINQ saya

var query = from c in dc.DataContext.vw_WebOrders
select new CisStoreData()
{
       Discount = Convert.ToDecimal(c.Discount)
};

Diskon masih nol setelah mengonversi dari Desimal? itu nol. Namun, di luar pernyataan Linq, saya mendapatkan 0 untuk konversi yang sama. Membuat frustrasi dan menjengkelkan. 

0
tony95