2009-12-30 68 views
1

我試圖將這段代碼從C#轉換爲VB。試圖使用第三方工具,但沒有成功。有人可以幫助我。謝謝從C#轉換爲VB的問題

private static string RemoveInvalidHtmlTags(this string text) 
{ 
    return HtmlTagExpression.Replace(text, new MatchEvaluator((Match m) => 
    { 
     if (!ValidHtmlTags.ContainsKey(m.Groups["tag"].Value)) 
      return String.Empty; 

     string generatedTag = String.Empty; 

     System.Text.RegularExpressions.Group tagStart = m.Groups["tag_start"]; 
     System.Text.RegularExpressions.Group tagEnd = m.Groups["tag_end"]; 
     System.Text.RegularExpressions.Group tag = m.Groups["tag"]; 
     System.Text.RegularExpressions.Group tagAttributes = m.Groups["attr"]; 

     generatedTag += (tagStart.Success ? tagStart.Value : "<"); 
     generatedTag += tag.Value; 

     foreach (Capture attr in tagAttributes.Captures) 
     { 
      int indexOfEquals = attr.Value.IndexOf('='); 

      // don't proceed any futurer if there is no equal sign or just an equal sign 
      if (indexOfEquals < 1) 
       continue; 

      string attrName = attr.Value.Substring(0, indexOfEquals); 

      // check to see if the attribute name is allowed and write attribute if it is 
      if (ValidHtmlTags[tag.Value].Contains(attrName)) 
       generatedTag += " " + attr.Value; 
     } 

     // add nofollow to all hyperlinks 
     //if (tagStart.Success && tagStart.Value == "<" && tag.Value.Equals("a", StringComparison.OrdinalIgnoreCase)) 
     // generatedTag += " rel=\"nofollow\""; 

     if (tag.Value.ToString() == "object") 
     { 
      generatedTag += (tagEnd.Success ? " height=\"374\" width=\"416\"" + tagEnd.Value : ">"); 
     } 
     else 
     { 
      generatedTag += (tagEnd.Success ? tagEnd.Value : ">"); 
     } 


     return generatedTag; 
    })); 
} 
+4

哪個部分會引起你的問題? – 2009-12-30 18:46:04

+0

爲什麼不編譯到IL然後使用反射器? – 2009-12-30 18:46:58

+0

問題在第3行和第5行之間。vb轉換表示 - 第4行第5列:VB不支持具有語句正文的匿名方法/ lambda表達式。 – vamsivanka 2009-12-30 18:51:01

回答

6

問題將這段代碼是,你必須用多行語句體lambda表達式:

(Match m) => 
{ 
    ...a lot of code 
} 

由於VB9不支持這一點,你要放在括號中的代碼爲其自身的功能,而不是:

Private Function GetValue(m As Match) As String 
    ....a lot of code 
End Function 

然後你RemoveInvalidHtmlTags代碼看起來就像這樣:

Return HtmlTagExpression.Replace(text, new MatchEvaluator(AddressOf GetValue)) 

您可以使用免費工具翻譯剩餘的代碼。

+0

我會嘗試一下,讓你知道。謝謝 – vamsivanka 2009-12-30 18:58:11

+0

+1。這就是OP所引用的錯誤消息的含義:「VB不支持匿名方法/ lambda表達式與語句正文」 – MarkJ 2009-12-30 20:41:41

+0

Meta-Knight,謝謝。您的解決方案奏效 – vamsivanka 2009-12-30 22:01:58

2

您是否試過這個free tool

+0

是的,我已經使用相同的工具進行轉換。但給我一個錯誤。 – vamsivanka 2009-12-30 18:52:50