使用QBFC检查quickbooks中的空值

时间:2014-06-23 16:54:51

标签: c# quickbooks qbfc

我正在尝试获取quickbooks数据库中的项目列表。我有以下代码片段:

                    IItemServiceRet itemServiceRet = itemRet.ItemServiceRet;

                    TestItem item = new TestItem();
                    item.Name = itemServiceRet.Name.GetValue();
                    item.Desc = itemServiceRet.ORSalesPurchase.SalesOrPurchase.Desc.GetValue();
                    item.Rate = itemServiceRet.ORSalesPurchase.SalesOrPurchase.ORPrice.Price.GetValue().ToString();
                    item.ItemType = "Service";
                    item.QBID = itemServiceRet.ListID.GetValue();
                    item.EditSeq = itemServiceRet.EditSequence.GetValue();

代码失败了:

item.Desc = itemServiceRet.ORSalesPurchase.SalesOrPurchase.Desc.GetValue();
"Object reference not set to an instance of an object"

因为QB数据库中的特定服务项没有描述。我很好奇是否有一种“干净”的方法来检查空值而不必让每一行都包含一个if语句来检查GetValue()是否返回null?

编辑:在尝试了Andrew Cooper的解决方案之后:

item.Desc = itemServiceRet.ORSalesPurchase.SalesOrPurchase.Desc == null ? null : itemServiceRet.ORSalesPurchase.SalesOrPurchase.Desc.GetValue();

它仍然抛出异常:

Object reference not set to an instance of an object

如果没有描述,就好像GetValue()根本没有返回任何内容,这没有多大意义。

2 个答案:

答案 0 :(得分:3)

您可以使用这样的三元运算符:

item.Desc = itemServiceRet.ORSalesPurchase.SalesOrPurchase.Desc == null ? null : itemServiceRet.ORSalesPurchase.SalesOrPurchase.Desc.GetValue();

但那很难看。

最好的办法是创建一个辅助方法,它采用任何类型Desc并包含上述逻辑。

答案 1 :(得分:1)

我认为没有更好的解决方案,因为您无法访问空对象的功能。我通常为我的项目创建一个构造函数来执行检查,所以我只需要执行一次。所以在你的例子中:

TestItem item = new TestItem(itemRet.ItemServiceRet);

构造函数看起来像这样:

public TestItem(IItemServiceRet i)
{
    if(i.Name != null) this.Name = i.Name.GetValue();
    if(i.ORSalesPurchase != null)
        if(i.ORSalesPurchase.SalesOrPurchase != null)
        {
            if(i.ORSalesPurchase.SalesOrPurchase.Desc != null) this.Desc = i.ORSalesPurchase.SalesOrPurchase.Desc.GetValue();
            if(i.ORSalesPurchase.SalesOrPurchase.ORPrice != null)
                if(i.ORSalesPurchase.SalesOrPurchase.ORPrice.Price != null) this.Price = i.ORSalesPurchase.SalesOrPurchase.ORPrice.Price.GetValue();
        }
}
请记住,这对字符串很有效,因为空字符串通常与空白字段相同,但对于QuickBooks中的数字字段,这可能会导致问题。例如,“发票”行可以包含空白数量字段(为双精度数)。双精度值默认为0.0,但QuickBooks中的空白数量字段被视为数量1.0。这也可能导致日期问题,因为QuickBooks可以有空日期字段。