我正在尝试使用下面的代码计算客户的订单总数和价值。
Dim iOrderCount As Integer
Dim iLineCount As Integer
Dim cTotalGoods As Decimal
Dim cTotalVat As Decimal
Dim cTotalDelivery As Decimal
Using manOrders As New CManOrders(m_dbSql)
manOrders.GetOrdersInProgress(sAccountCode, iOrderCount, iLineCount, cTotalGoods, cTotalVat, cTotalDelivery)
Run Code Online (Sandbox Code Playgroud)
当我在子例程中为这些变量赋值时GetOrdersInProgress,这些值被正确赋值,当我单步执行代码时我可以看到这一点。
Public Sub GetOrdersInProgress(sAccountCode As String, ByRef RET_orderCount As Integer, ByRef RET_lineCount As Integer,
ByRef RET_totalGoods As Decimal, ByRef RET_totalVat As Decimal, RET_totalDelivery As Decimal)
...
For Each dr As DataRow In m_dbSql.getDataTable(sql).Rows
RET_orderCount = dbToInt(dr(ORDER_COUNT))
RET_lineCount = dbToInt(dr(LINE_COUNT))
RET_totalGoods = dbToDecimal(dr(TOTAL_GOODS))
RET_totalVat = dbToDecimal(dr(TOTAL_VAT))
RET_totalDelivery = dbToDecimal(dr(2))
Return
Next
Run Code Online (Sandbox Code Playgroud)
但是,一旦我单步执行并移回GetOrdersInProgress调用子例程的位置,变量中的所有值都会正确返回,除了RET_totalDelivery我添加到另一开发人员项目中的新值。RET_totalDelivery该行中变量的值Public Sub GetOrdersInProgress...是正确的,并且在赋值后也是正确的,但是当它到达Return并且变量随后在父子例程中使用时,出于某种原因,除了我添加的新变量之外,它们都是正确的,RET_totalDelivery。如果该值没有被正确分配,我会理解,但事实确实如此。
为什么它总是返回0?
默认情况下,传递给vb.net方法的参数按值传递,或ByVal. 您没有ByRef在您的RET_totalDelivery论点中指定GetOrdersInProgress.
当方法结束时,不会保留对按值传递的参数所做的更改。
你的子系统现在应该是...
Public Sub GetOrdersInProgress(sAccountCode As String, ByRef RET_orderCount As Integer, ByRef RET_lineCount As Integer, ByRef RET_totalGoods As Decimal, ByRef RET_totalVat As Decimal, ByRef RET_totalDelivery As Decimal)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |