2012-06-22 60 views
5

我不確定該標題是否表達了我的意思,如果您可以在一個句子中更好地定義此問題,請更改它。我想要迭代T的集合,但不是使用(T)對象,我想檢索(T)object.SomeProperty。C#將Foreach值轉換爲其中一個屬性

我怎樣才能做到這一點:

List<Car> _cars; 
FillList(_cars); 

foreach (Car car in _cars) 
{ 
    Windshield ws = car.Windshield; 

    ws.DoWorkA(); 
    ws.DoWorkB(); 
    ws.DoWorkC(); 
} 

我很樂意做的事:

List<Car> _cars; 
FillList(_cars); 

foreach (Car car in _cars using ws as Windshield = car.Windshield) 
{ 
    ws.DoWorkA(); 
    ws.DoWorkB(); 
    ws.DoWorkC(); 
} 

任何方式成爲更懶惰的程序員?

+0

你的第二個方法是長於你的第一個。不知道這是多麼懶惰。 – Paddy

+2

是的,我知道,我考慮改變最後一句刪除懶惰,但我懶得這樣做。 – Michael

回答

14

您可以使用LINQ和選擇:

foreach (Windshield ws in _cars.Select(car => car.Windshield)) 
{ 
    ws.DoWorkA(); 
    ws.DoWorkB(); 
    ws.DoWorkC(); 
} 
+1

循環集合來構建一個新的集合來循環通過IMO不是最好的表現... –

+0

我認爲LINQ只會枚舉通過沒有建立一個全新的集合(除非你明確地調用像ToList()) –

+1

它贏得不會創建一個新的集合。 LINQ使用延遲執行。因爲代碼中沒有「ToList」或「ToArray」,所以它只會執行「one」foreach並在每個步驟中生成一個擋風玻璃。 – nemesv

1

使用LINQ:

List<Car> _cars; 
FillList(_cars); 
foreach (Windshield ws in _cars.Select(c=>c.Windshield) { 
     ws.DoWorkA(); 
     ws.DoWorkB(); 
     ws.DoWorkC(); 
    } 
相關問題