尝试使用catch语句将字符串转换为vb中的double

时间:2017-07-10 18:52:28

标签: vb.net

我有以下函数,用于检查给定条目是否高于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

然而,我一直在“没有宣布专注”。由于其保护水平,它可能无法进入。

有什么想法吗?感谢

5 个答案:

答案 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

关于Variable scope in VB .Net

的一些解读

关于Try/Catch blocks

的另一点阅读

不要使用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.TryParseDouble.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