使用QBFC检查快速本中的空值

本文关键字:空值 QBFC 检查 使用 | 更新日期: 2023-09-27 18:09:52

我正在尝试获取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数据库中的特定服务项目没有描述。我很好奇是否有一种"干净"的方法来检查null值,而不必让每一行都包含一个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((就好像什么都不返回一样,这没有多大意义。

使用QBFC检查快速本中的空值

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

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

但这太难看了。

最好的办法是创建一个helper方法,该方法采用任何类型的Desc并封装上述逻辑。

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

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();
        }
}
请记住,这对字符串很有效,因为空字符串通常与空白字段相同,但对于QuickBook中的数字字段,这可能会导致问题。例如,发票行可以有一个空白的数量字段(它是一个双字段(。double默认值为0.0,但QuickBooks中的空白数量字段将被视为1.0。这也可能导致日期问题,因为QuickBooks的日期字段可能为空。