簡體   English   中英

VB.NET:輸入字符串的格式不正確

[英]VB.NET: Input string was not in a correct format

帶有以下代碼段

Foo = IIf(String.IsNullOrEmpty(txtFoo.Text), 0, Integer.Parse(txtFoo.Text.Trim))

提交不帶值的字段時出現錯誤:“輸入字符串的格式不正確。” 我沒有任何空間或其他東西,並且String.IsNullOrEmpty(txtFoo.Text)返回true。 怎么了? 謝謝。

IIF將評估:

Integer.Parse(txtFoo.Text.Trim) 

不管是否:

String.IsNullOrEmpty(txtFoo.Text) 

是否為真(因為它只是一個傳遞了三個參數的函數,因此所有參數都必須有效)。 因此,即使txtFoo.text is empty ,在這種情況下,它仍會嘗試將其解析為Integer。

如果使用的是VS2008,則可以改用IF運算符,因為它會導致IIF短路。

IIf是函數調用,而不是真正的條件運算符,這意味着必須對兩個參數都進行求值。 因此,如果您的字符串為Null / Nothing,它只會嘗試調用Integer.Parse()。

如果您使用的是Visual Studio 2008或更高版本,則只能解決一個字符差異:

Foo = If(String.IsNullOrEmpty(txtFoo.Text), 0, Integer.Parse(txtFoo.Text.Trim())

此版本的If關鍵字實際上是一個真正的條件運算符,它將按預期對參數進行短路評估。

如果您使用的是Visual Studio 2005或更早版本,請按以下步驟修復它:

If String.IsNullOrEmpty(txtFoo.Text) Then Foo = 0 Else Foo = Integer.Parse(txtFoo.Text.Trim())

IIf不是真正的三元運算符,它實際上計算兩個參數表達式。 您可能想改為使用If運算符(VS 2008+)。

你只是說

If(String.IsNullOrEmpty(txtFoo.Text), 0, Integer.Parse(txtFoo.Text.Trim()))

條件部分和“其他”部分之間的區別是字符串的修剪。 您可以在調用IsNullOrEmpty之前嘗試修剪字符串。

Foo = IIf(String.IsNullOrEmpty(txtFoo.Text.Trim), 0, Integer.Parse(txtFoo.Text.Trim))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM