是VB.NET 2005中,有沒有辦法執行以下操作,而不會拋出invalid cast exception
試圖將空字符串轉換爲整數?如何避免評估所有'iif'表達?
Dim strInput As String = String.Empty
Dim intResult As Integer = IIf(IsNumeric(strInput), CInt(strInput), 100)
是VB.NET 2005中,有沒有辦法執行以下操作,而不會拋出invalid cast exception
試圖將空字符串轉換爲整數?如何避免評估所有'iif'表達?
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因爲它使用了短路的評價。
如果測試表達式的值爲true,則FalsePart只是忽略或反之亦然
正如剛纔馬立克Kembrowsky說,在其評論中,IIF是一個函數及其參數都計算被傳遞,而如果說之前(如三元運算符)是VB編譯器的附加功能。
但是,我不喜歡在VB.NET中編程時使用Microsoft.VisualBasic兼容命名空間提供的快捷方式。該框架提供了更好的解決方案,如TryParse方法集。如果輸入字符串超過Integer.MaxValue,那麼您的示例將失敗。
一個更好的辦法可能是
Dim d As decimal
if Not Decimal.TryParse(strInput, d) then d = 100
,或者,如果你有一個浮點string
(?OK OK,你明白我的意思)
Dim d As Double
if Not Double.TryParse(strInput, d) then d = 100
的如果解決方案工作......但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)
我會說你的'IsNumeric'方法應該爲空字符串返回false。但是你爲什麼要檢查'strInput'然後使用'str'? –
你不能 - 'IIf'不是一個表達式,而是一個函數,所以它必須在執行之前先評估所有參數。 –
@JoelEtherton:對不起,只是一個錯字。它確實返回false,但它引發了一個異常,我認爲它是因爲它試圖評估整個表達式。 – CJ7