2

私はCRM2011プラグインの新参者です。税額を更新するプラグインを作成しました。しかし、下の行でエラーがスローされます

「null許容オブジェクトには値が必要です」

double Tax = (double)(QuoteProduct.BaseAmount - QuoteProduct.ManualDiscountAmount - 
             QuoteProduct.VolumeDiscountAmount) / 20;

エラーが発生した場合の値は、基本金額= 0、
手動割引金額= null、
ボリューム割引金額=0です。

4

4 に答える 4

4

すべての変数がタイプであると仮定すると、 ()メソッドNullable<T>を使用できます( MSDNの記事)。GetValueOrDefault

このメソッドは、オブジェクトが持つ値を返すか、nullの場合はそのタイプのデフォルト値(doubleの場合は0.0)を返します。

double Tax = (double)(QuoteProduct.BaseAmount.GetValueOrDefault() - QuoteProduct.ManualDiscountAmount.GetValueOrDefault() - 
             QuoteProduct.VolumeDiscountAmount.GetValueOrDefault()) / 20;
于 2013-03-10T08:05:12.160 に答える
2

null を double にキャストすることはできません。

double x = null;

次のエラーが発生します。

null 非許容値型であるため、null を 'double' に変換できません

したがって、値が 0 (ゼロ) で null でないことを確認する必要があります。

于 2013-03-10T07:55:11.807 に答える
2

null から減算することはできません。

if (... != null) 
于 2013-03-10T07:56:34.023 に答える
1

あなたが作成した他の投稿からの定式化を認識しています。通常、このような状況では、次のような便利な構文を使用します。(他の返信者が言及したGetValueOrDefaultの構文は問題ありませんが、コードが読みにくくなり、が長くなる傾向があります。)

次の変更を検討してください (すべての部分がたまたまnullになる可能性があると想定しています。

decimal tax = QuoteProduct.BaseAmount ?? 0;
tax -= QuoteProduct.ManualDiscountAmount ?? 0;
tax -= QuoteProduct.VolumeDiscountAmount ?? 0;
QuoteProduct.Attribute["tax"] = tax / 20;

(これはあなたの他の質問に関連していると思います。)

于 2013-03-10T09:45:06.150 に答える