从C#到VB的转换问题

从C#到VB的转换问题,c#,vb.net,C#,Vb.net,我正在尝试将此代码从C#转换为VB。尝试使用第三方工具,但未成功。有人能帮我吗?谢谢 private static string RemoveInvalidHtmlTags(this string text) { return HtmlTagExpression.Replace(text, new MatchEvaluator((Match m) => { if (!ValidHtmlTags.ContainsKey(m.Groups["tag"].Valu

我正在尝试将此代码从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;
    }));
}
private静态字符串RemoveInvalidHtmlTags(此字符串文本)
{
返回HtmlTagExpression.Replace(文本,新匹配计算器((匹配m)=>
{
如果(!ValidHtmlTags.ContainsKey(m.Groups[“tag”].Value))
返回字符串。空;
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:);
}
返回生成的标记;
}));
}

您尝试过这个吗?

您尝试过这个吗?

转换这个代码的问题是您有一个带有多行语句体的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))

您可以使用免费工具翻译代码的其余部分。

转换此代码的问题在于您有一个带有多行语句体的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))

您可以使用免费工具翻译代码的其余部分。

哪些部分导致您出现问题?为什么不编译成IL,然后使用反射器?问题在第3行和第5行之间。vb转换说明——第4行第5列:vb不支持带有语句体的匿名方法/lambda表达式。Ipthnc-不知道如何“编译到IL并使用反射程序”??。你能详细解释一下吗。看起来像是重复的。哪些部分导致了你的问题?为什么不编译成IL然后使用反射器呢?问题在第3行和第5行之间。vb转换说明——第4行第5列:vb不支持带有语句体的匿名方法/lambda表达式。Ipthnc-不知道如何“编译到IL并使用反射程序”??。你能详细解释一下吗。看起来像是一个复制品。是的,我用了同样的工具来转换。但是给了我一个错误。是的,我使用了相同的工具来转换。但他给了我一个错误。我会试试,让你知道。谢谢你。这就是OP引用的错误消息的意思:“VB不支持带有语句体的匿名方法/lambda表达式”,我将尝试一下,并让您知道。谢谢你。这就是OP引用的错误消息的意思:“VB不支持带有语句体的匿名方法/lambda表达式”