当前位置:  开发笔记 > 编程语言 > 正文

使用LINQ替换循环是明智的吗?

如何解决《使用LINQ替换循环是明智的吗?》经验,为你挑选了1个好方法。

既然LINQ已经拥有了巨大的功能,我想知道哪种语法更可取.例如,我发现了以下方法(只是认为这是一个很好的例子):

foreach (FixtureImageServicesData image in _fixture.Images)
{
    if (image.Filename != _selectedFixtureImage.Filename && image.IsPrimary)
    {
        image.IsPrimary = false;
        image.IsChanged = true;
    }
}

如果我们将它转​​换为LINQ方法,它看起来像这样(未经测试):

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

您更愿意看到和维护哪一个?这是疯狂还是天才?



1> Jon Skeet..:

使用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;
}

如果你确实使用了一种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);

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有