既然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; });
您更愿意看到和维护哪一个?这是疯狂还是天才?
使用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);