2016-12-02 21 views
1

私のC#コードをVBに移動しようとしています。 Telerikの翻訳者からC#コードを実行すると、以下のVBコードが吐き出されます。 VBコードはコンパイルされず、 "a.Remove()"セクションにエラーが返されます。エラーは、VBのコードは、C#と同じように動作しますので、正しいコードは「スクリプト」と「」タグを削除することです何C#Linq構文の比較-vs- VB Linq構文

を「式は値を生成しません」

ですコード?

私のオリジナルの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を、使用しているということです。