2012-06-22 28 views
5

Tôi không chắc chắn rằng tiêu đề chuyển tải ý nghĩa của tôi, hãy thay đổi nó nếu bạn có thể xác định tốt hơn câu hỏi này trong một câu.C# Đưa giá trị Foreach vào một trong các thuộc tính của nó

Tôi muốn lặp qua bộ sưu tập T, nhưng thay vì làm việc với đối tượng (T), tôi muốn truy xuất (T) object.SomeProperty.

Làm thế nào tôi có thể làm điều đó:

List<Car> _cars; 
FillList(_cars); 

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

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

Những gì tôi muốn thích làm:

List<Car> _cars; 
FillList(_cars); 

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

Bất kỳ cách nào để trở thành một lập trình viên thậm chí lazier?

+0

Phương pháp thứ hai dài hơn đầu tiên của bạn. Không chắc chắn như thế nào là lười biếng. – Paddy

+2

Vâng, tôi biết, và tôi đã xem xét việc thay đổi câu cuối cùng để loại bỏ lười biếng, nhưng tôi đã quá lười biếng để làm như vậy. – Michael

Trả lời

14

Bạn có thể sử dụng LINQ và chọn:

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

Looping bộ sưu tập để xây dựng một bộ sưu tập mới để lặp qua IMO không phải là tốt nhất cho hiệu suất ... –

+0

Tôi nghĩ LINQ sẽ chỉ liệt kê mà không xây dựng một bộ sưu tập hoàn toàn mới (trừ khi bạn gọi một cách rõ ràng như ToList()) –

+1

Nó thắng không tạo bộ sưu tập mới. LINQ sử dụng thực thi hoãn lại. Bởi vì không có 'ToList' hoặc' ToArray' trong mã nó sẽ chỉ làm "một" foreach và mang lại một Windshield trong mỗi bước. – nemesv

1

sử dụng LINQ:

List<Car> _cars; 
FillList(_cars); 
foreach (Windshield ws in _cars.Select(c=>c.Windshield) { 
     ws.DoWorkA(); 
     ws.DoWorkB(); 
     ws.DoWorkC(); 
    } 
Các vấn đề liên quan