处理空值条件

3

我希望你能帮忙处理以下代码中的null条件。

    lstTest.Discount = If((Not dataSet.Tables("History") Is Nothing), 
If(IsDBNull(dataSet.Tables("History").Rows(0)("DiscountsAdjustmentsAmount")),
 "$0.00", 
StringToCurrency(GetContractualDiscount(dataSet.Tables("History").Rows(0)
("DiscountsAdjustmentsAmount"), dataSet.Tables("History").Rows(0)
("DiscountsAdjustments"), dataSet.Tables("History").Rows(0)
("EstimatedCharges")))), "$0.00")

我的代码在这里出现了错误

dataSet.Tables("History").Rows(0)("DiscountsAdjustments")

由于其值为null,我希望用“0.00”替换null值

请问如何处理?

谢谢


为什么不使用多行呢?这将极大地增加可读性、可维护性和可测试性。同时,修复此类问题也会更容易。 - Tim Schmelter
它早先已经编码完成,无法更改代码。 - rahul aggarwal
我可以整体修改它,但需要解决错误。 - rahul aggarwal
2
不要误解,但是这段代码真的很混乱。你不应该这样滥用条件运算符。你还应该使用正确的类型,而不是始终使用对象和字符串。DataRow类有Field(Of T)扩展方法,也支持可空类型。这听起来好像该列应该是一个Decimal?。然后你可以这样获取值:Dim discountsAdjustments = dataSet.Tables("History").Rows(0).Field(Of Decimal?)("DiscountsAdjustments") - Tim Schmelter
在尝试获取dataSet.Tables("History").Rows(0)("DiscountsAdjustmentsAmount")之前,您应该检查dataSet.Tables("History").Rows(0)是否为空。 - Scott Marcus
2个回答

2

你需要重写这部分内容。以下是你的原始代码:

   lstTest.Discount = If((Not dataSet.Tables("History") Is Nothing), 
If(IsDBNull(dataSet.Tables("History").Rows(0)("DiscountsAdjustmentsAmount")),
 "$0.00", 
StringToCurrency(GetContractualDiscount(dataSet.Tables("History").Rows(0)
("DiscountsAdjustmentsAmount"), dataSet.Tables("History").Rows(0)
("DiscountsAdjustments"), dataSet.Tables("History").Rows(0)
("EstimatedCharges")))), "$0.00")

不要使用这种嵌套混乱的方式……为什么不这样做呢?请注意,我没有一个VB调试器在我面前,所以可能需要进行一些轻微的格式调整,因此请把它看作是伪代码:

数据集是否有效

If Not IsDBNull(dataSet.Tables("History"))

''We know that we have data in our dataset

''Do all your checks 
if Not isDBNull(dataSet.Tables("History").Rows(0)("Your field"))
 ''Do something
Else
  ''Show a 0
END IF

''REPEAT THE ABOVE LINES FOR EACH FIELD

End if

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接