Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在单个If语句中使用两个“IsnotNothing”_Vb.net - Fatal编程技术网

Vb.net 在单个If语句中使用两个“IsnotNothing”

Vb.net 在单个If语句中使用两个“IsnotNothing”,vb.net,Vb.net,需要: 我需要检查if条件中的任一条件是否为真。我想检查DrainLeftFound或DrainRightFound是否为空。如果两个条件都不满足,则条件应失败;如果其中一个条件为真,则条件应存在。如果其中一个条件为真,我需要计算总基础长度,但如果个别条件为真,则计算总基础面积。我试过使用isnothing,但存在以下问题。 -当第一个条件为空但第二个条件不为空时 很好。 -当两个条件都不为空时,它工作。 -但它一直工作到两个条件都不为空,当第一个条件为空,第二个条件不为空时停止工作 D

需要: 我需要检查if条件中的任一条件是否为真。我想检查DrainLeftFound或DrainRightFound是否为空。如果两个条件都不满足,则条件应失败;如果其中一个条件为真,则条件应存在。如果其中一个条件为真,我需要计算总基础长度,但如果个别条件为真,则计算总基础面积。我试过使用isnothing,但存在以下问题。 -当第一个条件为空但第二个条件不为空时 很好。 -当两个条件都不为空时,它工作。 -但它一直工作到两个条件都不为空,当第一个条件为空,第二个条件不为空时停止工作

    Dim FoundationLength As Double, FoundationArea As Double
    For Each Area As DrainArea In Mydrainareacalc.MyDrainarea.Values
        'If (Area.DrainLeftFound IsNot Nothing) Or (Area.DrainRightFound IsNot Nothing) Then
        If ((Area.DrainRightFound IsNot Nothing) OrElse (Area.DrainRightFound IsNot Nothing)) Then
            FoundationLength += Area.Length
            If Area.DrainLeftFound IsNot Nothing Then
                For Each LeftFound As FoundLayerDetail In Area.DrainLeftFound
                    FoundationArea += LeftFound.LayerArea
                Next
            End If
            If Area.DrainRightFound IsNot Nothing Then
                For Each RightFound As FoundLayerDetail In Area.DrainRightFound
                    FoundationArea += RightFound.LayerArea
                Next
            End If
        End If
    Next
编辑 我想检查其中一个条件是否存在,然后执行循环。 该代码在上述条件下的第三点失败,在此特定的if条件下

If ((Area.DrainRightFound IsNot Nothing) OrElse (Area.DrainRightFound IsNot Nothing)) Then

DrainLeftFound和DrainRightFound是什么数据类型?从名称上看,它听起来像一个布尔值。对象区域可以为空,但属性DrainLeftFound和DrainRightFound将具有一个值,即使尚未指定一个值。值类型

Public Class AutomaticInitialization
    Private Sub AutomaticInitialization_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim da As New DrainArea
        Debug.Print(da.DrainLeftFound.ToString)
        Debug.Print(da.DrainRightFound.ToString)
    End Sub
End Class
Public Class DrainArea
    Public DrainLeftFound As Boolean
    Public DrainRightFound As Boolean
End Class

为了方便起见,我删除了带有OrElse条件的第一个循环,为每一行定义了长度变量,这样我以后可以加起来计算总长度。 删除:

遵循以下步骤


Dim FoundationLength As Double, FoundationArea As Double, **IndividualLength As Double**
                            For Each Area As DrainArea In Mydrainareacalc.MyDrainarea.Values
                                **IndividualLength = 0**
                                If Area.DrainLeftFound IsNot Nothing Then
                                    IndividualLength = Area.Length
                                    For Each LeftFound As FoundLayerDetail In Area.DrainLeftFound
                                        FoundationArea += LeftFound.LayerArea
                                    Next
                                End If
                                If Area.DrainRightFound IsNot Nothing Then
                                    IndividualLength = Area.Length
                                    For Each RightFound As FoundLayerDetail In Area.DrainRightFound
                                        FoundationArea += RightFound.LayerArea
                                    Next
                                End If
                                **FoundationLength += IndividualLength**

                            Next

首先,说某件事有效或无效是毫无意义的。代码执行它所执行的操作。如果我们阅读代码,那么我们将看到它做了它所做的,因此工作。如果代码的结果不是您想要的结果,那么您需要告诉我们您期望它是什么,以便我们了解为什么代码不是您想要的。不管怎样,在这里发布之前,您需要调试自己的代码。在代码顶部设置一个断点,并逐行遍历。然后,您可以准确地检测出行为不符合您的要求的地方。它在时失败,但在两个条件都不为空时工作,在第一个条件为空,第二个条件为空时停止工作。您能解释一下您需要什么样的条件吗?因为现在你正在检查左或右或者两者都是空的。如果两者都不为null,则不会执行代码。这就是您想要的吗?因为两者都在检查DrainRightFound,而不是Area.DrainLeftFound是否为Nothing或Else Area.DrainRightFound是否为Nothing。上面被注释掉的那一行是正确的。1开始你的问题时,我预计会发生X,但相反,我得到Y。2如果你指的是空的,空的或什么都不要说。3不要谈论条件,谈论变量。4在重新编写问题后,以一个对问题一无所知的人的身份从头开始阅读,并确保你完全理解。

Dim FoundationLength As Double, FoundationArea As Double, **IndividualLength As Double**
                            For Each Area As DrainArea In Mydrainareacalc.MyDrainarea.Values
                                **IndividualLength = 0**
                                If Area.DrainLeftFound IsNot Nothing Then
                                    IndividualLength = Area.Length
                                    For Each LeftFound As FoundLayerDetail In Area.DrainLeftFound
                                        FoundationArea += LeftFound.LayerArea
                                    Next
                                End If
                                If Area.DrainRightFound IsNot Nothing Then
                                    IndividualLength = Area.Length
                                    For Each RightFound As FoundLayerDetail In Area.DrainRightFound
                                        FoundationArea += RightFound.LayerArea
                                    Next
                                End If
                                **FoundationLength += IndividualLength**

                            Next