2016-07-28 127 views
0

我从来没有真正学过VB.NET,你会如何在VB.NET中编写它?你会如何在VB.NET中写这个?

下面是代码:

System.IO.StreamReader file = new System.IO.StreamReader(ofd_tracking_file.FileName); 
while ((line = file.ReadLine()) != null) 
{ 
} 

难道是这样吗?

Dim file As System.IO.StreamReader = New System.IO.StreamReader(ofd_tracking_file.FileName) 

While Not line = file.ReadLine() = Nothing  
End While 

不,转换器不工作,我已经尝试过。

+1

你尝试了吗?它编译了吗?它运行正确吗?此外,代码似乎转换罚款在这里http://converter.telerik.com/ – DavidG

+0

我不知道InlineAssignHelper是什么? –

+0

我在这里找到了我的答案:http://www.c-sharpcorner.com/forums/inlineassignhelper –

回答

1

C#代码使用表达式内的分配 - 这些在VB中不可用。 VB的等效是:

Dim file As New System.IO.StreamReader(ofd_tracking_file.FileName) 
line = file.ReadLine() 
Do While line IsNot Nothing 
    ... 
    line = file.ReadLine() 
Loop 

可避免额外“的ReadLine”语句,如果你能忍受与一个“退出做”无条件循环 - 只是陈述选项:

Do 
    line = file.ReadLine() 
    If line Is Nothing Then Exit Do 
    ... 
Loop 
0

这应该做使用经典模式的伎俩:

Dim file As New System.IO.StreamReader(ofd_tracking_file.FileName) 

Dim line = file.ReadLine() 
While line IsNot Nothing 
    'blah blah 
    line = file.ReadLine() 
End While 

这种方法的好处是,只有一个后卫的语句是必需的,但你必须有两个ReadLine陈述。

个人而言,Telerik建议的InlineAssignHelper是一个不好的模式,它只是让你的代码不清楚。

+0

@sstan感谢编辑,我无法弄清楚为什么它不能识别语言的权利:) – MickyD

+1

这是因为在这个特定的问题中,C#标记超过了VB.NET标记。发生这种情况时,您需要明确设置语法突出显示的语言。 – sstan

0

如果您担心您的代码可读性,那么在您的情况下使用纯粹vb.net代码将是更好的选择。

Using reader As New StreamReader(ofd_tracking_file.FileName) 
    Dim line As String = Nothing 
    Do 
     line = reader.ReadLine() 
     Debug.Write(line) 
    Loop Until line Is Nothing 
End Using 

或使用EndOfStream财产将在我看来更具有可读性(感谢@Visual文森特)

Using reader As New StreamReader(ofd_tracking_file.FileName) 
    While reader.EndOfStream = false 
     Dim line As String = reader.ReadLine() 
     'use line value 
    End While 
End Using 
+0

您的第一个示例将不起作用 - 当线条最终变为'Nothing'时,您在'循环直到'条件被检查之前使用它,所以您将获得空引用异常。 –

+0

@DaveDoknjas,如果使用line可以处理'null'值,它将工作。但你是对的,第一个例子将需要额外的检查。我添加了第一个示例,因为“Loop Until line Is Nothing”部分是可读性的很好例子:) – Fabio