Jas*_*ung 8 .net c# linq extension-methods
既然LINQ已经拥有了巨大的功能,我想知道哪种语法更可取.例如,我发现了以下方法(只是认为这是一个很好的例子):
foreach (FixtureImageServicesData image in _fixture.Images)
{
if (image.Filename != _selectedFixtureImage.Filename && image.IsPrimary)
{
image.IsPrimary = false;
image.IsChanged = true;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们将它转换为LINQ方法,它看起来像这样(未经测试):
_fixture.Images.Where(x => x.Filename != _selectedFixtureImage.Filename && x.IsPrimary).ForEach(x => { x.IsPrimary = false; x.IsChanged = true; });
Run Code Online (Sandbox Code Playgroud)
您更愿意看到和维护哪一个?这是疯狂还是天才?
Jon*_*eet 22
使用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;
}
Run Code Online (Sandbox Code Playgroud)
如果你确实使用了一种ForEach
方法,我肯定会用多行格式化它:
_fixture.Images
.Where(image => _selectedFixtureImage.Filename && image.IsPrimary)
.ForEach(image => { image.IsPrimary = false; image.IsChanged = true;});
Run Code Online (Sandbox Code Playgroud)
(减少压痕以避免包装......)
要么:
_fixture.Images
.Where(image => _selectedFixtureImage.Filename && image.IsPrimary)
.ForEach(image => { image.IsPrimary = false;
image.IsChanged = true; });
Run Code Online (Sandbox Code Playgroud)
您甚至可能希望将"制作非主要"位提取到单独的方法中,此时您将拥有:
_fixture.Images
.Where(image => _selectedFixtureImage.Filename && image.IsPrimary)
.ForEach(MakeNonPrimary);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1190 次 |
最近记录: |