2016-12-02 2 views
1

Я пытаюсь переместить часть своего кода на C# в VB. Когда я запускаю код C# через переводчик Telerik, он выплескивает код VB ниже. Код VB не будет компилироваться и выдавать сообщение об ошибке в разделе «a.Remove()». ОшибкаСравнение синтаксиса C# Linq -vs- Синтаксис VB Linq

«Expression не дает значение»

Что бы правильный код быть, чтобы удалить «сценарий» и «» метки, код VB работает так же, как C# код?

Мой оригинальный C# код:

public static HtmlDocument RemoveUselessTags(HtmlDocument doc) 
    { 
     doc.DocumentNode.Descendants() 
      .Where(a => a.Name == "script" || a.Name == "a") 
      .ToList() 
      .ForEach(a => a.Remove()); 
     return doc; 
    } 

Мой "переводится" VB код:

Public Shared Function RemoveUselessTags(doc As HtmlDocument) As HtmlDocument 
     doc.DocumentNode.Descendants() 
      .Where(Function(a) a.Name = "script" OrElse a.Name = "a") 
      .ToList() 
      .ForEach(Function(a) a.Remove()) 
     Return doc 
    End Function 
+3

Просто используйте настоящую петлю 'foreach' в первую очередь (на обоих языках). Это улучшает читаемость кода, устраняет ненужные сложности в синтаксисе (например, конкретный, который произошел с вами) и улучшает производительность (объем памяти от O (n) до O (1) не совсем бесполезен создавая список, который вы никогда не используете и не храните все элементы в нем). – Servy

+0

Вы совершенствуете перевод кода, за исключением того, что «OrElse» должен быть «Or». – jdweng

+1

@jdweng - Нет, 'OrElse' является эквивалентом VB короткого замыкания' '' оператора в C#. –

ответ

4

Проблема заключается в том, что вы используете Function, что вещи, которые возвращают значение. Вы должны уметь использовать:

ForEach(Sub(a) a.Remove()) 
Смежные вопросы