VB.NET:输入字符串的格式不正确

VB.NET:输入字符串的格式不正确,.net,vb.net,string,format,iif,.net,Vb.net,String,Format,Iif,使用以下代码段 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(t

使用以下代码段

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为空
,在本例中,它仍在尝试将其解析为整数


如果您使用的是VS2008,则可以改用If运算符,它会像您预期的IIF那样短路。

IIF将评估:

Integer.Parse(txtFoo.Text.Trim) 
不论:

String.IsNullOrEmpty(txtFoo.Text) 
是否为真(因为它只是一个传递了三个参数的函数,所以所有参数都必须有效)。因此,即使
txtFoo.text为空
,在本例中,它仍在尝试将其解析为整数


如果您使用的是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是一个函数调用,而不是一个真正的条件运算符,这意味着两个参数都必须求值。因此,如果字符串为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()))

IIf不是真正的三元运算符,它实际上计算两个参数表达式。您可能希望改用If操作符(VS 2008+)

你只会说

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

条件部分和“else”部分之间的一个区别是字符串的修剪。您可以在调用
IsNullOrEmpty
之前尝试修剪字符串

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

条件部分和“else”部分之间的一个区别是字符串的修剪。您可以在调用
IsNullOrEmpty
之前尝试修剪字符串

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

IIf
实际上是一个函数,它不仅仅是一个函数。。。。如果是一个运算符,那么它就不是一个函数,它的行为也不像1+1。虽然IIf实际上是一个函数,但它的行为不仅仅像1。。。。如果是一个操作符,那么它就不是一个函数,它的行为也不像一个+1