2016-07-28 2 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. В.Б. эквивалент:

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

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

+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, он будет работать, если использование строки может обрабатывать значение «null». Но вы правы, что первый пример потребует дополнительной проверки. Я добавил первый пример, потому что часть 'Loop Until line Is Nothing' является очень хорошим примером удобочитаемости :) – Fabio

Смежные вопросы