C# 将LinQ代码从C代码转换为VB.Net

C# 将LinQ代码从C代码转换为VB.Net,c#,asp.net,vb.net,linq,C#,Asp.net,Vb.net,Linq,如何将此代码重写为VB.net?在线转换工具在尝试转换函数的返回部分时会发出嘎嘎声 private static DataColumn[] ParseColumns(string tableHtml) { MatchCollection headerMatches = Regex.Matches( tableHtml, HeaderPattern, ExpressionOptions); return (from Match he

如何将此代码重写为VB.net?在线转换工具在尝试转换函数的返回部分时会发出嘎嘎声

private static DataColumn[] ParseColumns(string tableHtml)
{
    MatchCollection headerMatches = Regex.Matches(
        tableHtml,
        HeaderPattern,
        ExpressionOptions);

    return (from Match headerMatch in headerMatches
            select new DataColumn(headerMatch.Groups[1].ToString())).ToArray();
}

private static DataColumn[] GenerateColumns(MatchCollection rowMatches)
{
    int columnCount = Regex.Matches(
        rowMatches[0].ToString(),
        CellPattern,
        ExpressionOptions).Count;

    return (from index in Enumerable.Range(0, columnCount)
            select new DataColumn("Column " + Convert.ToString(index))).ToArray();
}
具体而言,在线工具将为我提供如下信息:

    Private Shared Function GenerateColumns(rowMatches As MatchCollection) As DataColumn()
     Dim columnCount As Integer = Regex.Matches(rowMatches(0).ToString(), CellPattern, ExpressionOptions).Count

     Return (From index In Enumerable.Range(0, columnCount)New DataColumn("Column " + Convert.ToString(index))).ToArray()   End Function
这最后一部分是不正确的:

(From index In Enumerable.Range(0, columnCount)New DataColumn("Column " + Convert.ToString(index))).ToArray()
我不明白这段C代码试图做什么——它看起来像LINQ或类似的东西


谢谢

这就是LINQ代码。它的优点在于,对于一系列方法调用来说,它完全是语法上的糖分。from用于从可枚举项有效地引入循环变量,select生成一个结果。后者实际上对应于一个Select方法。您可以按如下方式重写C LINQ代码:

Enumerable.Range(0, columnCount).Select(index => new DataColumn("Column " + index)).ToArray();
这将创建一个DataColumn对象数组,从0到给定columnCount的每个数字对应一个。您可以在VB中使用基本相同的语法,只是lambda看起来有点不同:

Enumerable.Range(0, columnCount).Select(Function(index) New DataColumn("Column " & index)).ToArray()

我想这就是您所需要的帮助。

不要使用正则表达式来处理html。Html是有效的xml,例如XDocument或XElement类会更好approach@Fabio:在一般情况下,这是正确的,但是如果您知道正在解析的内容的性质,并且它是一个有限的范围,正则表达式或其他形式的匹配/提取就可以了。@siride,使用正则表达式解析HTML可能会带来不同的问题-例如:。使用Xml解析器将以更清晰、可读和可维护的方式处理html。@Fabio:是的,我们都看到了那个愚蠢的答案。它在互联网上到处都有链接,而且它只在一般意义上是正确的。再一次,了解你的领域。你不必使用最强大的工具来解决给定的问题。否则,我们将构建完整的编译器工具链来处理每一种新的数据格式。比如说,如果您正在屏幕上抓取格式一致的数据表,那么使用正则表达式可能很好。谢谢!基于此,我还发现这些方法也可以工作:从headerMatch中的headerMatch返回选择New DataColumnheaderMatch.Groups1.ToString.ToArray,从Enumerable.Range0中的索引返回,columnCount选择New DataColumnColumn&Convert.ToString.ToArray