web-dev-qa-db-ja.com

Convert.ToDecimal(string)とDecimal.Parse(string)の違い

Convert.ToDecimal(string)Decimal.Parse(string)のC#の違いは何ですか?

どのシナリオでどちらを使用しますか?

パフォーマンスにどのような影響がありますか?

2つを選択する際に考慮すべき他の要素は何ですか?

26
YonahW

から bytes.com

Convertクラスは、さまざまな型を変換するように設計されているため、文字列のみを処理できるDecimal.Parseを使用する場合よりも多くの型をDecimalに変換できます。一方、Decimal.ParseではNumberStyleを指定できます。

Decimalとdecimalはエイリアスであり、同等です。

Convert.ToDecimal(string)の場合、Decimal.Parseが内部的に呼び出されます。

モーテンウェネビク[C#MVP]

Decimal.ParseはConvert.ToDecimalによって内部的に呼び出されるため、extremeパフォーマンス要件がある場合、 Decimal.Parseに固執したい場合は、スタックフレームを保存します。

39
Guy Starbuck

注意すべき重要な違いが1つあります。

Convert.ToDecimal 戻ります 0null文字列が指定されている場合。

decimal.Parseは、解析する文字列がArgumentNullExceptionの場合、nullをスローします。

46

あなたが考えなかったかもしれない一つの要因は、Decimal.TryParseメソッドです。 Convert.ToDecimalParseはどちらも、文字列を適切な10進形式に変換できない場合、例外をスローします。 TryParseメソッドは、入力の検証に適切なパターンを提供します。

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!

このパターンは、ユーザー入力のエラーチェックに非常に優れています。

15
David J. Sokol

元のトピックに関連する一般的な提案の1つ-入力文字列パラメーターが正しい数値形式表現であることが本当にわからない場合は、すぐにTryParse()を使用してください。

3
dimarzionist

Convert.ToDecimal(string)Decimal.Parse(string)の主な違いは、ConvertがNullを処理するのに対し、もう1つは例外をスローすることです

注:空の文字列は処理しません。

1
Taran

Convert.ToDecimalが明らかに0を返すとは限りません。私のlinqステートメントでは

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

Decimalから変換した後も割引がnullのままですか?それはnullです。ただし、Linqステートメントの外では、同じ変換で0が返されます。イライラして迷惑です。

0
tony95

Convert.ToDecimalは、NULLを処理するため、ほとんどの場合に使用できる方法であることを知っていますが、空の文字列を適切に処理しません。したがって、次の関数が役立つ可能性があります。

'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