Вложенный Linq Min () разрушает Visual Studio

Начиная с Xcode 4.2 и далее, вы можете использовать еще одну опцию. Просто нажмите один раз на имя файла .proj вверху на левой панели навигации, и оно будет доступно для переименования. Переименуйте его, и весь проект переименуется, а не только цель.

12
задан eyesnz 22 July 2009 в 00:05
поделиться

7 ответов

Некоторое время назад я отправил отчет об ошибке в MS Connect . Сегодня утром я получил ответ:

Спасибо за отчет об ошибке в Visual Studio 2008!

Как вы указываете в связанной публикации из блога Эрика Липперта, у нас есть ограничения на нашу способность делать вывод типов для таких вложенных лямбда-выражений. выражения в разумные сроки. Тем не менее, мы могли бы, конечно, попытаться ограничить такой вывод по времени или установить жесткое ограничение на вложение лямбда-выражений, чтобы предотвратить подобные проблемы. К сожалению, мы начинаем ограничивать то, что мы можем исправить в Visual Studio 2010, и мы не сможем применить такие ограничения в этом выпуске.

Мы обязательно учтем эту проблему при планировании будущих выпусков. !

Алекс Тернер

Менеджер программы

Компилятор Visual C #

и

Обновлен следующий элемент отзыва, отправленный вами на Microsoft Connect: Продукт / Технология - Visual Studio и .NET Framework - Идентификатор отзыва - 476133 Заголовок отзыва - Вложенный Linq Min () дает сбой в Visual Studio 2008 IDE. Изменены следующие поля или значения: Состояние поля изменено с [Активно] на [Решено]

Разрешение поля изменено с [Нет] на [Не исправлять]

3
ответ дан 2 December 2019 в 22:23
поделиться

Мне удалось воспроизвести это при установке Visual Studio 2008. Похоже, языковая служба заходит в бесконечный цикл и в конечном итоге исчерпывает память. Не могли бы вы сообщить об ошибке на сайте подключения?

Connect: http://connect.microsoft.com

Если вы все же сообщаете об ошибке, пожалуйста, добавьте комментарий к моему ответу с номером ошибки.

3
ответ дан 2 December 2019 в 22:23
поделиться

Вывод типа для вложенных лямбда-выражений занимает экспоненциальное время . Поэтому неудивительно, что компилятор замедляется, когда вы делаете слишком много вложений.

Однако в идеале IDE могла бы обрабатывать такие случаи и прерывать вывод типа, если это занимает слишком много времени.

3
ответ дан 2 December 2019 в 22:23
поделиться

Вам даже не нужно заходить так далеко. VS завис, когда я набирал часть d вложенного выражения LINQ.

0
ответ дан 2 December 2019 в 22:23
поделиться

Подумал, что стоит отметить, что он также "зависает" VS 2010, и более того, почти вся моя система зависает!

0
ответ дан 2 December 2019 в 22:23
поделиться

Использование базовой рекурсии вместо попытки «угадать» глубину, увеличение сложности на каждом уровне

public static class TestExt
{
    public static int Min(this Test test)
    {
        return Math.Min(test.val, test.Tests.Min(x => x.Min()));
    }
}
public class Test
{
    public int val;
    public List<Test> Tests;
}

public class LinqTest
{
    public void GetMin()
    {
        Test t = new Test();
        var min = t.Min();
    }
}

Как указал Райан Версо, вы также можете сделать это без таких методов расширения:

public class Test
{
    public int val;
    public List<Test> Tests;

    public int Min()
    {
        return Math.Min(val,Tests.Min(x => x.Min()));
    }
}
1
ответ дан 2 December 2019 в 22:23
поделиться

Думаю, я только что испытал нечто подобное. Я просматривал свой код и использовал var в строках, где я объявлял и инициализировал переменные для new SomeClass () . Мой код скомпилирован. Когда я пытался запустить какой-либо модульный тест Visual Studio 2008, Visual Studio вылетала с CLR20r3 в качестве имени / типа ошибки. После отмены всех моих изменений var тесты проходят нормально.

0
ответ дан 2 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: