是 VB.NET 2005,有没有办法在不invalid cast exception
尝试将空字符串转换为整数的情况下执行以下操作?
Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), CInt(strInput), 100)
是 VB.NET 2005,有没有办法在不invalid cast exception
尝试将空字符串转换为整数的情况下执行以下操作?
Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), CInt(strInput), 100)
VB.NET 现在有了真正的三元运算符(2008 年后)
Dim intResult = If(IsNumeric(strInput), CInt(strInput), 100)
这与 IIF 不同,因为它使用短路评估。
如果测试表达式的计算结果为真,则 FalsePart 将被忽略,反之亦然
正如 Marek Kembrowsky 先生在其评论中所说,IIF 是一个函数,其参数在传入之前都经过评估,而 IF(作为三元运算符)是 VB 编译器的附加功能。
但是,当我在 VB.NET 中编程时,我不喜欢使用 Microsoft.VisualBasic 兼容命名空间提供的快捷方式。该框架提供了更好的解决方案,例如 TryParse 方法集。如果输入字符串超过 Integer.MaxValue,您的示例将失败。
更好的方法可能是
Dim d As decimal
if Not Decimal.TryParse(strInput, d) then d = 100
或者,如果你有一个浮点数string
(?好吧好吧,你明白我的意思)
Dim d As Double
if Not Double.TryParse(strInput, d) then d = 100
If解决方案将起作用......但 IsNumeric() 不是正确的检查。如果 strInput 是一个数字但超过 integer.maxvalue 怎么办?改用 TryParse 更好。
Dim i As Integer
If Not Integer.TryParse("1234567890", i) Then i = 100
或者
Dim j As Integer = If(Integer.TryParse("123456789", Nothing), Integer.Parse("123456789"), 100)
解决这个问题的一种方法是:
Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), strInput, 100)
这样,强制转换是隐式完成的,不会出现任何无效的强制转换异常。