是否可以跳过选择.在LINQ中的选择方法 - 像'继续'在fore..each?
var myFoos = allFoos.Select (foo => {
var platform = LoadPlatform(foo);
if (platform == "BadPlatform") // TODO: should skip and continue
var owner = LoadOwner(foo);
// .... Som eother loads
});
Run Code Online (Sandbox Code Playgroud)
您应该使用 aWhere来过滤掉您不需要的元素。这对于您当前的代码来说是不可能的,但是有很大的重构空间。像这样重写它:
var myFoos = allFoos
.Where(foo => LoadPlatform(foo) != "BadPlatform")
.Select(LoadOwner)
// ...continue with your other code
Run Code Online (Sandbox Code Playgroud)
如果“其他代码”也需要平台值,那么您应该首先投影到匿名类型:
var myFoos = allFoos
.Select(foo => new { Platform = LoadPlatform(foo), Foo = foo })
.Where(o => o.Platform != "BadPlatform")
.Select(o => new { Platform = o.Platform, Owner = LoadOwner(o.Foo), ... })
// ...continue with your other code
Run Code Online (Sandbox Code Playgroud)
一般来说,如果可能的话,您应该避免在这种 lambda 中编写块表达式;块表达式会导致代码僵化,无法轻松编写。
var myFoos = from foo in allFoos
let platform = LoadPlatform(foo)
where platform != "BadPlatform"
select LoadOwner(foo);
Run Code Online (Sandbox Code Playgroud)