Я пытаюсь переместить часть своего кода на 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
Просто используйте настоящую петлю 'foreach' в первую очередь (на обоих языках). Это улучшает читаемость кода, устраняет ненужные сложности в синтаксисе (например, конкретный, который произошел с вами) и улучшает производительность (объем памяти от O (n) до O (1) не совсем бесполезен создавая список, который вы никогда не используете и не храните все элементы в нем). – Servy
Вы совершенствуете перевод кода, за исключением того, что «OrElse» должен быть «Or». – jdweng
@jdweng - Нет, 'OrElse' является эквивалентом VB короткого замыкания' '' оператора в C#. –