Есть ли ошибка в этом коде из 101 LINQ Samples на MSDN?(Обновление: исправлено) - PullRequest
4 голосов
/ 18 января 2010

ПРИМЕЧАНИЕ: Чарли Калверт ответил ниже, что 101 образец LINQ теперь обновлен с правильным кодом.

В Центре разработчиков MSDN Visual C # есть раздел 101 LINQ Samples . Я нашел это с помощью поиска Bing.

Код для SelectMany - соединение от 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, и добавлю from перед b 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 будут поддерживать использование запятой вместо from в синтаксисе LINQ?

image

Я использую Visual Studio 2008 Standard с .NET 3.5 SP1.

Ответы [ 3 ]

4 голосов
/ 18 января 2010

Да, это ошибка в примере.

Я сильно подозреваю, что это было из предварительной версии, где этот синтаксис мог поддерживаться. Я ожидаю, что он все еще отображается в разделе «Будущие версии», потому что на момент написания он был относительно будущей версии.

Этот синтаксис определенно не поддерживается в C # 4, который является единственной будущей версией, которая была публично признана.

2 голосов
/ 19 января 2010

Да, мы только что обновили большинство из 101 семпла новым кодом, который должен быть менее подвержен подобным проблемам. Мы опубликовали много нового кода, и все еще есть некоторые глюки, особенно вокруг пробелов, но, надеюсь, мы в лучшей форме, чем были. Попробуйте получить доступ к ссылке сейчас, и посмотрите, выглядит ли она лучше:

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

  • Charlie
0 голосов
/ 18 января 2010

Это ошибка, как упоминал Джон. Кроме того, выборки неверно перечисляют несуществующие методы: Fold и EqualAll . Их заменили на Aggregate и SequenceEqual соответственно.

...