2016-12-02 131 views
1

我想將一些C#代碼移到VB中。當我通過Telerik的翻譯器運行C#代碼時,它將吐出下面的VB代碼。 VB代碼不會編譯並給出「a.Remove()」部分並出錯。該錯誤是C#Linq語法比較-vs- VB Linq語法

所以VB代碼工作一樣的C#「表達式不會產生一個值」

將正確的代碼是什麼去掉「腳本」和「a」標籤碼?

我原來的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是C#中短路「||」運算符的VB等價物。 –

回答

4

的問題是,你使用Function,這是東西返回一個值。你應該可以使用:

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