将使用VB.NET编写的LINQ转换为C#

3

我想把下面的VB.NET代码转换成C#:

stacks.AddRange(
    From bin In UpstreamBinNames 
    Where bin <> BinName(BeforeTrack) 
    Select binWall = ConfigGlobals.Bins(bin).Wall 
    From aStack In binWall.Stacks Select aStack)

我理解前半部分,但后半部分让人困惑。如何在不使用LINQ的情况下重写这个呢?
谢谢。

4
人们常常在想为什么分号和大括号会是好东西... - David L
3个回答

3
会像这样(请原谅使用C#,但您应该能够理解):

将会像这样(请原谅使用C#,但您应该能够理解):

foreach(var bin in UpstreamBinNames)
{
    if(bin != BinName(BeforeTrack)
    {
        var binWall = ConfigGlobals.Bins(bin).Wall;
        foreach(var aStack in binWall.Stacks)
        {
            stacks.Add(aStack);
        }
    }
}

谢谢,这正是我想的,但我非常不确定。需要确认一下。我发现linq版本在我的大脑中计算得不太好。干杯! - Datman

2
这样如何?使用SelectMany来选择所有的堆栈。
stacks.AddRange(UpstreamBinNames
                    .Where(bin=> bin !=  BinName(BeforeTrack))
                    .SelectMany(s=>ConfigGlobals.Bins(bin).Wall.Stacks)
               );

谢谢,对我来说SelectMany比原始代码更易读。 - Datman

2

Something like:

var tmpStacks = new List<Stack>();
foreach(var bin in UpstreamBinNames)
{
    if (bin != BinName(BeforeTrack))
    {
        var binWall = ConfigGlobals.Bins(bin).Wall;
        foreach (var aStack in binWall.Stacks)
            tmpStacks.Add(aStack);
    }
}
stacks.AddRange(tmpStacks);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接