it-swarm-eu.dev

Unterschied zwischen Convert.ToDecimal (string) und Decimal.Parse (string)

Was ist der Unterschied in C # zwischen Convert.ToDecimal(string) und Decimal.Parse(string)?

In welchen Szenarien würden Sie eine über der anderen verwenden?

Welchen Einfluss hat es auf die Leistung?

Welche anderen Faktoren sollte ich bei der Wahl zwischen den beiden berücksichtigen?

26
YonahW

Von bytes.com :

Die Convert-Klasse ist so konzipiert, dass Eine breite Palette von Typen konvertiert, sodass Sie Mehr Typen in Dezimalzahl konvertieren können als , Die Sie mit Decimal.Parse, die . ] befassen sich nur mit String. Auf der anderen Seite Decimal.Parse können Sie Einen NumberStyle angeben.

Dezimal und Dezimal sind Aliase und Sind gleich.

Für Convert.ToDecimal (string) wird Decimal.Parse intern aufgerufen.

Morten Wennevik [C # MVP]

Da Decimal.Parse intern von Convert.ToDecimal aufgerufen wird, wenn Sie die Leistungsanforderungen fürextremehaben, möchten Sie möglicherweise Decimal.Parse beibehalten. Dadurch wird ein Stack-Frame gespeichert.

39
Guy Starbuck

Es gibt einen wichtigen Unterschied, den Sie beachten sollten:

Convert.ToDecimal gibt 0 zurück, wenn ihm eine null-Zeichenfolge gegeben wird.

decimal.Parse gibt eine ArgumentNullException aus, wenn die Zeichenfolge, die Sie analysieren möchten, null ist.

45

Ein Faktor, an den Sie möglicherweise nicht gedacht haben, ist die Decimal.TryParse-Methode. Sowohl Convert.ToDecimal als auch Parse werfen Ausnahmen aus, wenn sie die Zeichenfolge nicht in das richtige Dezimalformat konvertieren können. Die TryParse-Methode liefert ein Nice-Muster für die Eingabeüberprüfung.

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!

Dieses Muster ist für die Fehlerprüfung der Benutzereingaben sehr unglaublich.

15
David J. Sokol

Ein allgemeiner Vorschlag, der sich auf das ursprüngliche Thema bezieht - verwenden Sie TryParse(), sobald Sie sich nicht wirklich sicher sind, ob der Eingabe-String-Parameter die richtige Darstellung des Zahlenformats ist.

3
dimarzionist

Der Hauptunterschied zwischen Convert.ToDecimal(string) und Decimal.Parse(string) Besteht darin, dass Convert Null verarbeitet, während der andere eine Ausnahme auslöst

Hinweis: Leere Zeichenfolge wird nicht verarbeitet.

1
Taran

Convert.ToDecimal gibt anscheinend nicht immer 0 zurück. In meiner linq-Anweisung

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

Rabatt ist nach der Konvertierung von einer Dezimalzahl immer noch null? das ist null. Außerhalb einer Linq-Anweisung bekomme ich jedoch eine 0 für dieselbe Konvertierung. Frustrierend und nervig. 

0
tony95

Zu wissen, dass Convert.ToDecimal in den meisten Fällen die richtige Methode ist, da es NULL verarbeitet, leere Zeichenfolgen jedoch nicht sehr gut verarbeitet. Die folgende Funktion könnte also hilfreich sein:

'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