繁体   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