VB.NET:代码的捷径

时间:2010-06-11 08:42:17

标签: vb.net

为什么我的VS2005 IDE中的以下VB.NET代码设置为str

If Trim(str = New StreamReader(OpenFile).ReadToEnd) <> "" Then
    Button2.Enabled = True
    TextBox1.Text = fname
End If

OpenFile是一个返回FileStream

的函数

编辑:如果包含修剪的上述行不正确,有没有办法只在一行中达到预期的结果?

3 个答案:

答案 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 ExplicitOption 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