it-swarm-tr.com

Convert.ToDecimal (string) ve Decimal.Parse (string) arasındaki fark

C # 'daki Convert.ToDecimal(string) ve Decimal.Parse(string) arasındaki fark nedir?

Birini diğerinde hangi senaryolarda kullanırsınız?

Performans üzerindeki etkisi nedir?

İkisi arasında seçim yaparken başka hangi faktörleri göz önünde bulundurmalıyım?

26
YonahW

From bytes.com :

Convert sınıfı, , Çok çeşitli Türleri dönüştürmek üzere tasarlanmıştır, böylece , Öğesinden Decimal.Parse ile yapabileceğiniz Öğesinden daha fazla türü dönüştürebilir. ] sadece String ile ilgilenir. Öte yandan El Ondalık.Parse Bir NumberStyle belirtmenize izin verir.

Ondalık ve ondalık, takma addır ve Eşittir.

Convert.ToDecimal (string) için Decimal.Parse dahili olarak adlandırılır.

Morten Wennevik [C # MVP]

Ondalık.Parse, Convert.ToDecimal tarafından dahili olarak çağrıldığından,aşırıperformans gereksinimleriniz varsa, Ondalık.

39
Guy Starbuck

Akılda tutulması gereken önemli bir fark var:

Convert.ToDecimalnull dizesi verilirse 0 değerini döndürür.

Ayrıştırmak istediğiniz dize ArgumentNullException ise decimal.Parse __null atar.

45

Düşünmediğiniz bir faktör Decimal.TryParse metodudur. Hem Convert.ToDecimal hem de Parse, dizeyi uygun ondalık biçime dönüştüremezlerse istisnalar atar. TryParse yöntemi, giriş doğrulama için size güzel bir desen verir.

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!

Bu kalıp, hata kontrolü yapan kullanıcı girişi için inanılmaz derecede harika.

15
David J. Sokol

Orijinal konuyla ilgili genel bir öneri - lütfen giriş dizesi parametresinin doğru sayı biçim gösterimi olacağından emin olamadığınız anda TryParse() öğesini kullanın.

3
dimarzionist

Convert.ToDecimal(string) ve Decimal.Parse(string) arasındaki ana fark __ Convert Null 'i idare ederken, diğeri istisna atar

Not: Boş dize işlemez.

1
Taran

Convert.ToDecimal görünüşte her zaman 0 döndürmez.

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

Ondalık dönüştürüldükten sonra indirim hala boş mu? bu boş. Ancak, bir Linq ifadesinin dışında, aynı dönüşüm için 0 alırım. Sinir bozucu ve sinir bozucu. 

0
tony95

Convert.ToDecimal öğesinin NULL’u işlediği için çoğu durumda gitmenin yoludur, ancak boş dizgiyi çok iyi kullanmaz. Bu nedenle, aşağıdaki işlev yardımcı olabilir:

'object should be a string or a number
Function ConvertStringToDecimal(ByVal ValueToConvertToDecimal As Object) As Decimal
    If String.IsNullOrEmpty(ValueToConvertToDecimal.ToString) = False Then
        Return Convert.ToDecimal(ValueToConvertToDecimal)
    Else
        Return Convert.ToDecimal(0)
    End If
End Function
0
Nandostyle