Put*_*aKg 0 c# linq windows-phone-8
如何缩短以下代码,可能使用匿名方法或扩展名LINQ.
因为我必须多次重复这段代码,所以我希望尽可能简洁.
var imagesToUnlock = App.ImageListVM.Items.Where(img => img.Category == key);
foreach (var image in imagesToUnlock)
{
image.IsLocked = false;
}
Run Code Online (Sandbox Code Playgroud)
这里的其他解决方案感觉很脏,因为它们通过使用LINQ来改变集合中的对象.
我会将代码和过滤条件放入扩展方法并调用:
public static IEnumerable<Item> UnlockWhere(this IEnumerable<Item> list, Func<Item, bool> condition) {
foreach (var image in list)
if (condition(image)) {
image.IsLocked = false;
yield return image;
}
}
Run Code Online (Sandbox Code Playgroud)
LINQ的不变性问题保持不变并仍然产生预期的结果.
通话成为:
var unlockedItems = App.ImageListVM.Items.UnlockWhere(img => img.Category == key);
Run Code Online (Sandbox Code Playgroud)
编辑
重写以完全删除LINQ.相反,这个新方法只迭代一次并返回一个新的变异集合.