You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中变量'stocks'未赋值即使用报错,求代码修正指导

VB.NET报错:"variable 'stocks' is used before it has been assigned a value" 问题分析与修复

问题场景

编写VB.NET代码时遇到上述报错,相关代码如下:

For i = 0 To _myTable.Rows.Count - 1
    Dim detail = New ItemTransfersDetail With {
        .No = Convert.ToInt32(_myTable.Rows(i)(0)),
        .Invno = BtxtInvoNo.Text,
        .CodeProduct = _myTable.Rows(i)(1).ToString(),
        .Barcode = _myTable.Rows(i)(2).ToString(),
        .Colorcode = _myTable.Rows(i)(3).ToString(),
        .Size = _myTable.Rows(i)(4).ToString(),
        .Qty = Convert.ToInt32(_myTable.Rows(i)(5).ToString())
    }

    Dim stocks = New Stocks With {
        ' 报错行
        .QTY_STOCK = (stocks.QTY_STOCK - detail.Qty),
        .CodeProduct = _myTable.Rows(i)(1).ToString(),
        .Barcode = _myTable.Rows(i)(2).ToString(),
        .Colorcode = _myTable.Rows(i)(3).ToString(),
        .Size = _myTable.Rows(i)(4).ToString()
    }
    itrservicedetail.InsertItemTransfersdetail(detail)
    sservice.Updatestockminus(stocks)
Next

Public Class Stocks
    Public Property CodeProduct() As String
    Public Property Barcode() As String
    Public Property Colorcode() As String
    Public Property Size() As String
    Public Property QTY_STOCK() As Integer
End Class

错误原因

报错的核心问题是:在使用对象初始化器创建stocks对象时,你试图引用还未完成初始化的stocks变量的QTY_STOCK属性来计算新值。此时stocks还没有被赋值(对象还没创建完成),它的属性自然没有有效值,VB.NET编译器会直接检测到这个未定义的引用并报错。

简单说,你不能用一个正在创建的对象的属性,来给它自己的属性赋值。

修复方案

要实现“库存减去出库数量”的逻辑,你需要先从数据源(比如数据库)获取该商品当前的库存数量,再用这个值减去detail.Qty,最后赋值给Stocks对象的QTY_STOCK属性。

修改后的代码示例:

For i = 0 To _myTable.Rows.Count - 1
    Dim detail = New ItemTransfersDetail With {
        .No = Convert.ToInt32(_myTable.Rows(i)(0)),
        .Invno = BtxtInvoNo.Text,
        .CodeProduct = _myTable.Rows(i)(1).ToString(),
        .Barcode = _myTable.Rows(i)(2).ToString(),
        .Colorcode = _myTable.Rows(i)(3).ToString(),
        .Size = _myTable.Rows(i)(4).ToString(),
        .Qty = Convert.ToInt32(_myTable.Rows(i)(5).ToString())
    }

    ' 1. 先根据商品标识查询当前库存数量
    Dim currentStockQty = sservice.GetCurrentStockQty(
        detail.CodeProduct, 
        detail.Barcode, 
        detail.Colorcode, 
        detail.Size
    )

    ' 2. 计算更新后的库存数量
    Dim updatedStockQty = currentStockQty - detail.Qty

    ' 3. 初始化Stocks对象
    Dim stocks = New Stocks With {
        .QTY_STOCK = updatedStockQty,
        .CodeProduct = detail.CodeProduct,
        .Barcode = detail.Barcode,
        .Colorcode = detail.Colorcode,
        .Size = detail.Size
    }

    itrservicedetail.InsertItemTransfersdetail(detail)
    sservice.Updatestockminus(stocks)
Next

说明:

  • GetCurrentStockQty是需要你自己实现的方法,功能是根据商品的CodeProduct、Barcode等唯一标识,从数据库中查询当前的库存数量。
  • 这样既避免了引用未初始化的stocks变量,逻辑上也符合“先获取当前库存,再计算更新后的值”的业务流程。

内容的提问来源于stack exchange,提问作者roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:55:05