2

我是 CRM 2011 插件的新手。我写了一个插件来更新税值。但是在下面的行会引发错误

“可空对象必须有值”

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

发生错误时,值为:基础金额=0,
手动折扣金额=空,
批量折扣金额=0

4

4 回答 4

4

假设您的所有变量都是 type Nullable<T>,您可以使用GetValueOrDefault() 方法(MSDN文章)。

该方法将返回对象具有的值,或者在 null 的情况下返回该类型的默认值(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 转换为“double”,因为它是不可为 null 的值类型

因此,您必须确保您的值是 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 回答