[英]Vb.net Simple TextBox conversion to integer gives error input string was not in a correct format
[英]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.