是否可以在条件下取消选择和"继续".Select语句?

pen*_*ake 9 .net c# linq

是否可以跳过选择.在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)

Jon*_*Jon 6

您应该使用 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 中编写块表达式;块表达式会导致代码僵化,无法轻松编写。


Lee*_*Lee 2

var myFoos = from foo in allFoos
             let platform = LoadPlatform(foo)
             where platform != "BadPlatform"
             select LoadOwner(foo);
Run Code Online (Sandbox Code Playgroud)