【问题标题】:Checking for null values in quickbooks using QBFC使用 QBFC 检查快速手册中的空值
【发布时间】:2014-06-23 16:54:51
【问题描述】:

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

                    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() 是否返回空值?

编辑:在尝试了 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() 什么都不返回,这没有多大意义。

【问题讨论】:

  • item.Desc 正在寻找一个值。所以你必须做空字符串而不是null。此外,您可能必须使用简单的 If Then,而不是三元运算符。

标签: c# quickbooks qbfc


【解决方案1】:

你可以像这样使用三元运算符:

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

但这很丑。

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

【讨论】:

  • 我试过了,但我仍然得到“对象引用未设置为对象的实例”它好像 GetValue() 不返回 null 如果什么都没有,但根本什么都不返回。
  • 属性Desc 为空。在空引用上调用.GetValue() 是异常的来源。如果Desc 有一个非空值,那么.GetValue() 可以正常工作。
【解决方案2】:

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

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 可以有空日期字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多