我有以下函数,用于检查给定条目是否高于0.0
Dim inputstr As String = .Item("conc")
Try
Dim concentration As Double = CDbl(inputstr)
Catch ex As Exception
Dim concentration As Double = -1.0
Finally
Dim concentration As Double = -1.0
End Try
If concentration > 0.0 Then
err = 1
End If
然而,我一直在“没有宣布专注”。由于其保护水平,它可能无法进入。
有什么想法吗?感谢
答案 0 :(得分:3)
它不在try catch之外的范围内。声明它然后尝试在try / catch中设置它。但问题是,由于-1.0
。
Finally
结尾
Dim inputstr As String = .Item("conc")
Dim concentration As Double = 0.0
Try
concentration = CDbl(inputstr)
Catch ex As Exception
concentration = -1.0
End Try
If concentration > 0.0 Then
err = 1
End If
最终您可以使用Double.TryParse
Dim inputstr As String = .Item("conc")
Dim concentration As Double = 0.0
If Double.TryParse(inputstr, concentration) AndAlso concentration > 0.0 then
'Do what you intended
End If
答案 1 :(得分:3)
可变范围
变量Concentration
仅存在于Try块中。因此,无论何时离开此块,变量都不再存在。
要解决此问题,您必须在尝试之前声明Concentration
。
最后阻止
您将遇到的另一个问题是Concentration
将始终为-1,因为您在Finally
块中这样说,此处不需要此块。
Dim inputstr As String = .Item("conc")
Dim concentration As Double
Try
concentration = CDbl(inputstr)
Catch ex As Exception
concentration = -1.0
End Try
If concentration > 0.0 Then
err = 1
End If
的一些解读
的另一点阅读
不要使用Try / Catch来执行此操作
但是,作为stated by Fabio,您可以使用Double.TryParse()来做到这一点,它更容易阅读,更重要,it is a performance increase。
所以,最后,做更好的编码实践:
Dim inputstr As String = .Item("conc")
Dim concentration As Double
If Not Double.TryParse(inputstr, concentration) Then
concentration = -1.0
End If
If concentration > 0.0 Then
err = 1
End If
答案 2 :(得分:2)
虽然你的主要问题是
concentration
不在范围内
Finally
将始终执行,不会抛出异常,因此concentration
将始终设置为-1.0
- 您仍然不需要使用Try .. Catch
方法。 Double.TryParse
将在一行中处理它。
Dim concentration As Double = 0.0
Double.TryParse(.Item("conc"), concentration)
err = If(concentration > 0.0, 1, 0)
Double.TryParse(inputstr, concentration)
- 将concentration
设置为转换后的双倍值或默认值,如果字符串格式不正确,则为0.0
类型double
。
答案 3 :(得分:1)
如何使用VB.Net,并使用Double.TryParse
或Double.Parse
这将使您的代码类似
dim concentration as Double = -1
'dont really know where this one is coming from though
err = 0
if Double.TryParse(inputstr, concentration) then
if concentration > 0.0 then
err = 1
end if
end if
答案 4 :(得分:0)
事实上,您的代码存在2个问题
在尝试之前需要声明一个concentration
第二个删除最后,否则总是为-1.0