C# C-Linq语法与VB-Linq语法的比较

C# C-Linq语法与VB-Linq语法的比较,c#,vb.net,linq,C#,Vb.net,Linq,我正在尝试将一些C代码移到VB中。当我通过Telerik的翻译程序运行C代码时,它会吐出下面的VB代码。VB代码将不会编译,并在a.Remove部分给出和错误。错误是 表达式不产生值 正确的代码是什么来删除脚本和a标记,这样VB代码的工作原理与C代码相同 我的原始C代码: public static HtmlDocument RemoveUselessTags(HtmlDocument doc) { doc.DocumentNode.Descendants()

我正在尝试将一些C代码移到VB中。当我通过Telerik的翻译程序运行C代码时,它会吐出下面的VB代码。VB代码将不会编译,并在a.Remove部分给出和错误。错误是

表达式不产生值

正确的代码是什么来删除脚本和a标记,这样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(Sub(a) a.Remove())

问题是您使用的是函数,它用于返回值的对象。您应该能够使用:

ForEach(Sub(a) a.Remove())

只需在两种语言中首先使用真正的foreach循环即可。它提高了代码的可读性,通过不完全不必要地创建一个您从未使用过的列表并存储其中的所有项目,消除了语法中不必要的复杂情况,例如碰巧绊倒您的特定语法,并提高了性能内存占用从上到下的性能。您对代码的翻译是完美的,除了“OrElse应该是”或“。@jdweng-No,OrElse是C语言中短路| |操作符的VB等价物。在两种语言中,首先使用一个真正的foreach循环。它提高了代码的可读性,通过不完全不必要地创建一个您从未使用过的列表并存储其中的所有项目,消除了语法中不必要的复杂情况,例如碰巧绊倒您的特定语法,并提高了性能内存占用从上到下的性能。您对代码的翻译是完美的,除了“OrElse应该是”或“。@jdweng-No,OrElse是C中短路| |运算符的VB等价物。