为什么我的VS2005 IDE中的以下VB.NET代码设置为str
:
If Trim(str = New StreamReader(OpenFile).ReadToEnd) <> "" Then
Button2.Enabled = True
TextBox1.Text = fname
End If
OpenFile
是一个返回FileStream
编辑:如果包含修剪的上述行不正确,有没有办法只在一行中达到预期的结果?
答案 0 :(得分:5)
代码永远不会设置str
:
If Trim(str = New StreamReader(OpenFile).ReadToEnd) <> "" Then
此行未设置str
,将与读取文件的结果进行比较。
在VB中,=
运算符有两个含义,具体取决于上下文。如果在语句中使用,它会将右侧表达式分配给左侧表达式。如果在任何其他上下文中使用(即在表达式中),则执行相等比较,不赋值。
因此,在VB中,必须编写以下内容:
str = New StreamReader(OpenFile()).ReadToEnd()
If str.Trim() <> "" Then …
请注意,我已经通过方法调用替换了自由函数Trim
,以使代码与常见的.NET编码实践更加一致。
答案 1 :(得分:3)
启动任何VB.Net项目时要做的第一件事是确保在项目设置中Option Explicit
和Option Strict
都设置为true。如果你有特定的原因(你需要延迟绑定或接管一些旧的可怕代码),只能禁用其中任何一个。
这会阻止该代码进行编译,并且会立即向您显示错误。
答案 2 :(得分:0)
因为你没有设置str,你要比较它,然后修剪比较的结果(基本上修剪“True”或“False”
If Trim(str = New StreamReader(OpenFile).ReadToEnd) <> "" Then
这实际上并没有设置str,这分解为以下代码
Dim str as string ' Defaults to nothing/""
Dim boolValue as bool = (str = New StreamReader(OpenFile).ReadToEnd)
If Trim(boolValue) <> "" Then
' This is always true, as "True" and "False" will never = ""'
...
End If