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

时间:2016-08-11 02:53:59

标签: c# asp.net vb.net linq

如何将此代码重写为VB.net?当在线转换工具尝试转换函数的Return部分时,它会堵塞。

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或类似的东西。

谢谢!

1 个答案:

答案 0 :(得分:3)

这是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()

我认为这就是你所需要的所有帮助。