CJ7*_*CJ7 1 .net vb.net casting lazy-evaluation iif
是VB.NET 2005,有没有办法在没有抛出invalid cast exception尝试将空字符串转换为整数的情况下执行以下操作?
Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), CInt(strInput), 100)
Run Code Online (Sandbox Code Playgroud)
VB.NET现在有一个真正的三元运算符(2008年之后)
Dim intResult = If(IsNumeric(strInput), CInt(strInput), 100)
Run Code Online (Sandbox Code Playgroud)
这与IIF不同,因为它使用短路评估.
如果测试表达式的计算结果为true,则忽略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
Run Code Online (Sandbox Code Playgroud)
或者,如果你有一个浮点string(?好的,你明白我的意思)
Dim d As Double
if Not Double.TryParse(strInput, d) then d = 100
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |