我试图获得一系列2个字段的值,男性,女性计算出一个百分比。
EmployeesData.vb中的
Public Function getPercentMen() As Double
Dim result As Double
result = 0
If Men + Women > 0 Then result = (Men * 100) / (Men + Women)
End If
Return result
End Function
在我的Demographics.vb中,我有以下输出:
Private Sub updateView()
' The percentage Men and Women recorded is displayed in
' the appropriate text boxes.
percentMenTextBox.Text = fEmployeesData.getPercentMen().ToString()
percentWomenTextBox.Text = fEmployeesData.getPercentWomen().ToString()
updateView()
End Sub
我得到的错误是
An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll
Visual Studio将我指向以下行
percentMenTextBox.Text = fEmployeesData.getPercentMen().ToString()
我认为问题在于我试图强制将Double强制转换为String或类似的东西
我添加了整个班级
Public Class EmployeesData
Private fMen As Integer
Private fWomen As Integer
Public Sub New()
fMen = 0
fWomen = 0
End Sub
Public ReadOnly Property Men As Integer
Get
Return fMen
End Get
End Property
Public ReadOnly Property Women As Integer
Get
Return fWomen
End Get
End Property
Public Sub addMen()
fMen = fMen + 1
End Sub
Public Sub addWomen()
fWomen = fWomen + 1
End Sub
Public Function getPercentMen() As Double
Dim result As Double
result = 0
If Men + Women > 0 Then
result = (Men * 100) / (Men + Women)
End If
Return result
End Function
Public Function getPercentWomen() As Double
Dim result As Double
result = 0
If Men + Women > 0 Then
result = (Women * 100) / (Men + Women)
End If
Return result
End Function
Public Sub reset()
fMen = 0
fWomen = 0
End Sub
End Class
答案 0 :(得分:3)
出现此错误的原因是:
Private Sub updateView()
'... snipped
updateView()
End Sub
你在这里所拥有的基本上是一个永不停止的循环,递归地调用一个子程序(它会添加到堆栈中),最终会导致堆栈溢出。
VS指向fEmployeesData.getPercentMen()
的原因是该调用基本上是使玻璃溢出的下降,因为它会对堆栈执行额外的添加,此时该堆栈已满。换句话说,错误信息具有误导性,因为它可能很容易成为下一个呼叫,或者下一次往返呼叫本身。
解决方案是从内部删除updateView()
调用。只能从外部代码调用它。如果您需要不断调用它,请考虑使用计时器,或仅在需要时从事件中使用它。
您的其他代码没问题,与此错误无关。
希望这有帮助。
答案 1 :(得分:0)
我在这里看到两个问题。首先,我猜你正在使用的Men and Women变量都是整数,所以你看到整数除法。整数除以整数的结果仍然是......整数。
请改为尝试:
Public Function getPercentMen() As Double
Dim result As Double = 0.0
If Men + Women > 0 Then result = (Men * 100.0) / (Men + Women)
Return result
End Function
其次,要获得StackOverflow异常,您可能会拥有自引用属性。检查您的男性和女性变量的实施方式。如果他们自己使用,或者他们使用这个getPercentMen()方法,你可以创建一个没有基本情况的递归调用,这将导致StackOverflow。