2

是 VB.NET 2005,有没有办法在不invalid cast exception尝试将空字符串转换为整数的情况下执行以下操作?

Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), CInt(strInput), 100)
4

3 回答 3

9

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
于 2012-11-21T13:26:16.983 回答
1

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)
于 2012-11-21T13:39:27.103 回答
0

解决这个问题的一种方法是:

Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), strInput, 100)

这样,强制转换是隐式完成的,不会出现任何无效的强制转换异常。

于 2012-11-21T13:44:56.847 回答