Как бы вы написали это в 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

И нет, конвертеры не работают, я уже пробовал.

3 ответа

Код 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', если можете выполнить безусловный цикл с помощью 'Exit Do' - просто указав опции:

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

Это должно сработать, используя классический шаблон:

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 заявления.

Лично InlineAssignHelper предложенный Telerik плохой шаблон, который просто делает ваш код неясным.

Если вы беспокоитесь о читабельности своего кода, тогда используйте чистый 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 Vincent)

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
Другие вопросы по тегам