使用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((就好像什么都不返回一样,这没有多大意义。
您可以使用这样的三元运算符:
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的日期字段可能为空。