【问题标题】:Is there a bug in this code from 101 LINQ Samples on MSDN? (Update: Fixed)此代码中是否存在来自 MSDN 上 101 LINQ Samples 的错误? (更新:已修复)
【发布时间】:2010-01-17 21:20:59
【问题描述】:

注意:Charlie Calvert 在下方回复说 101 个 LINQ 示例现已更新为正确的代码。

MSDN Visual C# 开发人员中心有一个名为101 LINQ 示例 的部分。我是通过 Bing 搜索找到的。

SelectMany - Compound from 1 的代码是:

public void Linq14() {
    int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
    int[] numbersB = { 1, 3, 5, 7, 8 };

    var pairs =
        from a in numbersA,
             b in numbersB
        where a < b
        select new {a, b};

    Console.WriteLine("Pairs where a < b:");
    foreach (var pair in pairs) {
        Console.WriteLine("{0} is less than {1}", pair.a, pair.b);
    }
}

但是,此代码无法编译。我注意到如果我删除from a in numbersA, 末尾的逗号,而是在b in numbersB 前面添加from,它将编译并正常工作:

        var pairs =
            from a in numbersA
            from b in numbersB
            where a < b
            select new {a, b};

我不确定这是否是 MSDN 示例中的错误,或者我可能正在运行不支持此语法的 C# 和 .NET 版本。

如果我查看 101 LINQ 示例 网站顶部的面包屑导航,我看到它显示的是“未来版本”。这是否表明未来的 C#/.NET 版本将支持在 LINQ 语法中使用逗号而不是 from

我正在使用带有 .NET 3.5 SP1 的 Visual Studio 2008 Standard。

【问题讨论】:

    标签: c# .net linq msdn


    【解决方案1】:

    是的,这是示例中的错误。

    我强烈怀疑它来自可能已支持该语法的预发布版本。我预计它仍会显示在“未来版本”下,因为在编写它时,它是关于未来版本的。

    C# 4 肯定不支持这种语法,这是唯一被公开承认的未来版本。

    【讨论】:

      【解决方案2】:

      是的,我们刚刚使用新代码更新了 101 个示例中的大部分,这些代码应该不会受到此类问题的困扰。我们发布了很多新代码,但仍然存在一些小故障,尤其是在间距方面,但希望我们的状态比以前更好。现在尝试访问该链接,看看它是否看起来更好:

      http://msdn.microsoft.com/en-us/vcsharp/aa336758.aspx

      • 查理

      【讨论】:

        【解决方案3】:

        正如 Jon 所说,这是一个错误。此外,the samples 错误地列出了不存在的方法:FoldEqualAll。它们分别被AggregateSequenceEqual 取代。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-03
          • 1970-01-01
          • 2018-05-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多