4

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

MSDN Visual C# 开发人员中心有一个名为101 LINQ Samples的部分。我通过必应搜索找到了这个。

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,添加,它将编译并正常工作:fromb in numbersB

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

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

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

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

4

3 回答 3

4

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

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

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

于 2010-01-17T21:23:37.283 回答
2

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

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

  • 查理
于 2010-01-18T22:49:08.107 回答
0

正如乔恩所说,这是一个错误。此外,示例错误地列出了不存在的方法:FoldEqualAll。它们分别被Aggregate和取代SequenceEqual

于 2010-01-17T21:51:06.850 回答