函数返回true,但在赋值时它变为false

时间:2010-12-07 19:02:19

标签: vb.net winforms

我调用一个函数(SaveChanges)来访问我的业务/数据层,并将所有更改保存到标记为Add或Update并标记为要处理的字段。此功能用于在60多分钟前完成工作。

发生的事情是突然该函数返回false。在通过代码调试之后,当它命中Return时,本地布尔值设置为True ...但是当它返回到调用方法(并使用返回值)时,它现在是False。

正如我所说,我逐行检查并调试了它,然后我添加了一块手表。有趣的是,有一个位置将布尔值设置为false,当我在该位置放置断点时,它永远不会到达。

这是功能:

Private Function SaveChanges() As Boolean

    Dim blnSaved As Boolean = True

    Dim saveableRows As List(Of DataRow) = (From d As DataRow In _listData.Tables(0).Rows _
                                            Where Not d("Marking") = "Duplicate" _
                                            And d("Process") = True _
                                            Select d).ToList()


    If saveableRows.Count > 0 Then

        For Each drRow As DataRow In saveableRows

            Dim data As IDataEntity = DataEntities.GetData(_tableName)

            If drRow("Marking") = "Update" Then

                'UPDATE
                data.UpdateItem(drRow.ItemArray)

            Else

                'ADD
                data.AddItem(drRow.ItemArray)

            End If

            If data.HasErrors Then

                blnSaved = False 'Never reaches this part ... !?!?!

            End If

        Next

    Else

        blnSaved = True

    End If

End Function

以下是我使用该功能的方法:

If SaveChanges() Then

        Dim frmTableView As frmTableView = New frmTableView(_listData.Tables(0).TableName)

        If Not Me.MdiParent Is Nothing Then

            frmTableView.MdiParent = Me.MdiParent

        End If

        frmTableView.Show()

        Me.Close()

    Else

        MessageBox.Show("Unable to save the list. IT has been notified.", "Save Failed", MessageBoxButtons.OK, MessageBoxIcon.Error)

    End If

我花了太多时间在这上面,并认为是时候寻求帮助了。

由于

4 个答案:

答案 0 :(得分:6)

你永远不会返回你的布尔值。添加:

Return blnSaved

在函数的底部。

答案 1 :(得分:1)

您永远不会分配函数返回值。您将获得其默认值False。而不是分配给局部变量(blnSaved),而是分配给SaveChanges。或者在函数末尾添加Return blnSaved。

答案 2 :(得分:1)

你不是在功能结束时错过Return blnSaved吗?

答案 3 :(得分:1)

我同意您只是缺少Return blnSaved语句。我还建议您不需要以下else语句,因为您已经在方法的开头初始化了blnSaved值。

 Else

        blnSaved = True

 End If