2016-04-26 70 views
3

轉換LINQ我想下面的VB.NET代碼轉換成C#:寫在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

人們想知道爲什麼分號和護腕是好東西...... –

回答

3

會是這樣的(使用赦免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); 
     } 
    } 
} 
+0

謝謝,這是我的想法,但對此非常不確定。需要確定。我發現linq版本在腦中不能很好地計算。乾杯 – Datman

2

喜歡的東西:

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); 
2

這個怎麼樣?使用SelectMany選取所有堆棧。

stacks.AddRange(UpstreamBinNames 
        .Where(bin=> bin != BinName(BeforeTrack)) 
        .SelectMany(s=>ConfigGlobals.Bins(bin).Wall.Stacks) 
       ); 
+0

謝謝,SelectMany比我原來的可讀性要好得多。 – Datman