C# 是否可以取消选择和';继续';根据条件选择语句?

C# 是否可以取消选择和';继续';根据条件选择语句?,c#,.net,linq,C#,.net,Linq,是否可以跳过在.Select方法中的选择,就像在fore..each中的“continue”一样 var myFoos = allFoos.Select (foo => { var platform = LoadPlatform(foo); if (platform == "

是否可以跳过在.Select方法中的选择,就像在fore..each中的“continue”一样

var myFoos = allFoos.Select (foo =>                                                                                                 {

    var platform = LoadPlatform(foo);
        if (platform == "BadPlatform") // TODO:  should skip and continue
        var owner = LoadOwner(foo);
        // .... Som eother loads
});

您可以这样做:

var myFoos = allFoos
        .Select (foo => new {Platform = LoadPlatform(foo), Foo = foo})
        .Where(all => all.Platform != "BadPlatform")
        .Select(all => {
            var platform = all.Platform;//Not "BadPlatform"
            var owner = LoadOwner(all.Foo);
            // .... Som eother loads
        });
var myFoos = allFoos
    .Where(foo => LoadPlatform(foo) != "BadPlatform")
    .Select(LoadOwner)
    // ...continue with your other code

您应该使用
Where
来过滤掉不需要的元素。这在您当前的代码中是不可能的,但是有很多重构的空间。改写如下:

var myFoos = allFoos
        .Select (foo => new {Platform = LoadPlatform(foo), Foo = foo})
        .Where(all => all.Platform != "BadPlatform")
        .Select(all => {
            var platform = all.Platform;//Not "BadPlatform"
            var owner = LoadOwner(all.Foo);
            // .... Som eother loads
        });
var myFoos = allFoos
    .Where(foo => LoadPlatform(foo) != "BadPlatform")
    .Select(LoadOwner)
    // ...continue with your other code
如果“其他代码”也需要平台值,则应首先投影到匿名类型:

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

通常,如果可能的话,应该避免在这种lambda中编写块表达式;块表达式会产生难以编写的僵硬代码。

a
a
Where
before
Select
?但我正在Select中加载平台。@pencilCake-我不确定你的意思-你的测试是针对你正在加载的平台进行的。在不先加载的情况下,如何检查条件?