Действительно ли мудро использовать LINQ для замены циклов?

Вызвать члена класса CProgressCtrl :: SetMarquee , чтобы включить или выключить режим выделения. Вы можете вызвать это в любое время (после создания элемента управления).

8
задан Jason Young 25 February 2009 в 14:35
поделиться

3 ответа

Используя a ForEach дополнительный метод хорошо, но существует промежуточный подход:

// Rename 'query' to something meaningful :)
var query = _fixture.Images
                    .Where(image => _selectedFixtureImage.Filename 
                                    && image.IsPrimary);

foreach (FixtureImageServicesData image in query)
{
    image.IsPrimary = false;
    image.IsChanged = true;
}

Если Вы действительно используете a ForEach метод, я определенно отформатировал бы его в нескольких строках:

_fixture.Images
    .Where(image => _selectedFixtureImage.Filename && image.IsPrimary)
    .ForEach(image => { image.IsPrimary = false; image.IsChanged = true;});

(Уменьшенное добавление отступа, чтобы не переноситься...)

или:

_fixture.Images
        .Where(image => _selectedFixtureImage.Filename && image.IsPrimary)
        .ForEach(image => { image.IsPrimary = false; 
                            image.IsChanged = true; });

Вы могли бы даже хотеть извлечь "превращающий неосновной" бит в отдельный метод, в которой точке Вы будете иметь:

_fixture.Images
        .Where(image => _selectedFixtureImage.Filename && image.IsPrimary)
        .ForEach(MakeNonPrimary);
22
ответ дан 5 December 2019 в 06:39
поделиться

Это напоминает мне немного, "должен я использовать Regex, или стандартные строковые функции" или "должны я использовать XSLT/XPATH, чтобы преобразовать XML или использовать SelectSingleNode ()".

Первая возможность (т.е. Regex/XSLT/Linq) часто рассматривается более изящная и мощная любым, кто провел некоторое время, изучая это.

В то время как для всех остальных это, кажется, менее читаемо и более сложно по сравнению со второй опцией (т.е. строковые функции, SelectSingleNode (), простой цикл foreach).

В прошлом я был обвинен в сверхусложнении вещей при помощи Regex и XSLT/XPATH в моем дизайне.

Просто недавно я обвинялся в "том, чтобы бояться изменения" путем предпочтения простого foreach (и даже для) циклы во многих ситуациях по Linq Где, Foreach и т.д.

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

Принимая во внимание, что я всегда находил, что намного более умно рассмотреть каждую ситуацию на своих достоинствах и выбрать правильный инструмент для задания. Я просто игнорирую их и продолжаю мой подход ;)

Для той ситуации Вы описываете, первая опция более предпочтительна для меня. Однако я, вероятно, использовал бы подход Linq, если бы мои команды были все компетентны в Linq, и у нас были инструкции по кодированию для предотвращения больших острот (путем разделения его их)

2
ответ дан 5 December 2019 в 06:39
поделиться

Что-либо, что уменьшает вертикальную или горизонтальную сложность, плюс для меня. Кроме того, Linq является намного более описательным из того, что Вы пытаетесь выполнить.

1
ответ дан 5 December 2019 в 06:39
поделиться