.net 在类级别声明变量时,对象引用未设置为对象的实例
有时,当我在类级别声明变量并在过程中使用该变量时,会出现“对象引用未设置为对象的实例”错误 例如,这是我最近的一个项目,创建一个程序来显示特定温度下物质的状态:.net 在类级别声明变量时,对象引用未设置为对象的实例,.net,vb.net,winforms,visual-studio-2010,.net,Vb.net,Winforms,Visual Studio 2010,有时,当我在类级别声明变量并在过程中使用该变量时,会出现“对象引用未设置为对象的实例”错误 例如,这是我最近的一个项目,创建一个程序来显示特定温度下物质的状态: Public Class Form1 Const WATER_FP As Integer = 0 Const WATER_BP As Integer = 100 Const ETHANOL_FP As Integer = -114 Const ETHANOL_BP As Integer = 78 Co
Public Class Form1
Const WATER_FP As Integer = 0
Const WATER_BP As Integer = 100
Const ETHANOL_FP As Integer = -114
Const ETHANOL_BP As Integer = 78
Const MERCURY_FP As Integer = -39
Const MERCURY_BP As Integer = 357
Const OXYGEN_FP As Integer = -219
Const OXYGEN_BP As Integer = -183
Dim strSolid As String = vbNullString
Dim strGas As String = vbNullString
Dim sngTemperature As Single = CSng(txtTemperature.Text)
Private Sub btnDisplayState_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplayState.Click
If sngTemperature <= WATER_FP Then
strSolid &= "Water "
ElseIf sngTemperature >= WATER_BP Then
strGas &= "Water "
End If
If sngTemperature <= ETHANOL_FP Then
strSolid &= "Ethanol "
ElseIf sngTemperature >= ETHANOL_BP Then
strGas &= "Ethanol "
End If
If sngTemperature <= MERCURY_FP Then
strSolid &= "Mercury "
ElseIf sngTemperature >= MERCURY_BP Then
strGas &= "Mercury "
End If
If sngTemperature <= OXYGEN_FP Then
strSolid &= "Oxygen "
ElseIf sngTemperature >= OXYGEN_BP Then
strGas &= "Oxygen "
End If
If strSolid <> vbNullString Then
strSolid = "Substances that are in solid state are " & strSolid
Else
strSolid = "No substances are in solid state."
End If
If strGas <> vbNullString Then
strGas = "Substances that are in gaseous state are " & strGas
Else
strGas = "No substances are in gaseous state."
End If
lblMessage.Text = strSolid & ControlChars.CrLf & strGas
End Sub
End Class
公共类表单1
常量水\u FP为整数=0
常量水\u BP为整数=100
常数FP为整数=-114
常数为整数=78
常量MERCURY_FP为整数=-39
常数MERCURY_BP为整数=357
常数氧作为整数=219
常数氧_BP为整数=-183
Dim strSolid As String=vbNullString
作为字符串的Dim strGas=vbNullString
尺寸SNG单一温度=CSng(txtTemperature.Text)
私有子btnDisplayState_Click(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理btnDisplayState。单击
如果SNG温度=水_BP,则
strGas&=“水”
如果结束
如果sngTemperature=乙醇_BP,则
strGas&=“乙醇”
如果结束
如果sngTemperature=MERCURY\u BP,则
strGas&=“水星”
如果结束
如果SNG温度=氧气_BP,则
strGas&=“氧气”
如果结束
如果是strSolid vbNullString,则
strSolid=“固态物质为”&strSolid
其他的
strSolid=“没有任何物质处于固态。”
如果结束
如果字符串为空,则
strGas=“气态物质为”&strGas
其他的
strGas=“没有任何物质处于气态。”
如果结束
lblMessage.Text=strSolid&ControlChars.CrLf&strGas
端接头
末级
调试后,我得到一个如上所述的错误,没有突出显示代码导致问题的位置。但是,如果我将变量移动到
btnDisplayState\u单击
,则程序工作正常。现在我知道了错误的原因,但是我想知道为什么会出现这个问题。您不能用控件的属性声明变量,因为控件尚未初始化。您需要在输入某些文本后而不是在有值之前设置该值
Dim sngTemperature As Single = CSng(txtTemperature.Text)'no value here yet
只需将其声明为类级别:
Dim sngTemperature As Single
然后在按钮事件中设置它
Dim sngTemperature As Single = CSng(txtTemperature.Text)
不要这样分配变量。假设txtTemperature.Text在sngtTemperature之前初始化。轻松修复,更改为:
Dim sngTemperature As Single = 0
并将您的方法更改为从以下内容开始:
Private Sub btnDisplayState_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplayState.Click
sngTemperature = CSng(txtTemperature.Text)
If sngTemperature <= WATER_FP Then
strSolid &= "Water "
' etc etc
Private子btnDisplayState\u Click(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理btnDisplayState。单击
SNGTTemperature=CSng(txtTemperature.Text)
如果温度