我是 CRM 2011 插件的新手。我写了一个插件来更新税值。但是在下面的行会引发错误
“可空对象必须有值”
double Tax = (double)(QuoteProduct.BaseAmount - QuoteProduct.ManualDiscountAmount -
QuoteProduct.VolumeDiscountAmount) / 20;
发生错误时,值为:基础金额=0,
手动折扣金额=空,
批量折扣金额=0
我是 CRM 2011 插件的新手。我写了一个插件来更新税值。但是在下面的行会引发错误
“可空对象必须有值”
double Tax = (double)(QuoteProduct.BaseAmount - QuoteProduct.ManualDiscountAmount -
QuoteProduct.VolumeDiscountAmount) / 20;
发生错误时,值为:基础金额=0,
手动折扣金额=空,
批量折扣金额=0
假设您的所有变量都是 type Nullable<T>
,您可以使用GetValueOrDefault
() 方法(MSDN文章)。
该方法将返回对象具有的值,或者在 null 的情况下返回该类型的默认值(0.0 表示双精度)。
double Tax = (double)(QuoteProduct.BaseAmount.GetValueOrDefault() - QuoteProduct.ManualDiscountAmount.GetValueOrDefault() -
QuoteProduct.VolumeDiscountAmount.GetValueOrDefault()) / 20;
您不能将 null 转换为 double。
double x = null;
产生错误:
无法将 null 转换为“double”,因为它是不可为 null 的值类型
因此,您必须确保您的值是 0(零)而不是 null。
你不能从 null 中减去!
if (... != null)
我从你发表的另一篇文章中认出了这个公式。通常,在这种情况下,我会使用如下很好的语法。(其他回复者提到的GetValueOrDefault的语法是可以的,但往往会使您的代码可读性降低,并且行会变得很长。)
考虑以下更改(我假设每个部分都可能碰巧为null。
decimal tax = QuoteProduct.BaseAmount ?? 0;
tax -= QuoteProduct.ManualDiscountAmount ?? 0;
tax -= QuoteProduct.VolumeDiscountAmount ?? 0;
QuoteProduct.Attribute["tax"] = tax / 20;
(我假设这与您的其他问题有关。)