2012-02-02 19 views
81

Cho một lớp:Đặt nhiều thuộc tính trong Danh sách <T> ForEach()?

class foo 
{ 
    public string a = ""; 
    public int b = 0; 
} 

Sau đó, một danh sách chung của họ:

var list = new List<foo>(new []{new foo(), new foo()}); 

Nếu tôi để gán nhiều thuộc tính bên trong sau List<T>ForEach() phương pháp, là có một cách đơn giản hơn để làm nó dưới đây? Hy vọng tôi hơi dày.

// one property - easy peasy 
list.ForEach(lambda => lambda.a="hello!"); 
// multiple properties - hmm 
list.ForEach(lambda => new Action(delegate() { lambda.a = "hello!"; lambda.b = 99;}).Invoke()); 

Edit: Tư tưởng ForEach() là một phương pháp khuyến nông LINQ, khi nó thực sự là một phần của List<T> oops!

phương pháp
+0

Tôi không có bất kỳ đầu mối nào cho câu trả lời của bạn, nhưng tôi rất quan tâm đến phương pháp này của mã này. Bạn có thể vui lòng xác định Hành động là gì không? – Anwar

+4

Không quan trọng, nhưng đây là một phương thức trên 'Danh sách ' và không phải là LINQ. Ngoài ra, bạn có thể tạo danh sách của mình với 'var list = new List () {new foo(), new foo()};' – Marc

+1

@Anwar http://msdn.microsoft.com/en-us/library/system .action.aspx – maxp

Trả lời

187

Tất cả bạn cần làm là giới thiệu một số dấu ngoặc để phương pháp vô danh của bạn có thể hỗ trợ nhiều dòng:

list.ForEach(i => { i.a = "hello!"; i.b = 99; }); 
9
list.ForEach(lamba=>lambda.a="hello!"); 

trở thành

list.ForEach(item=>{ 
    item.a = "hello!"; 
    item.b = 99; 
}); 

Tất nhiên bạn cũng có thể gán cho họ khi bạn tạo danh sách như:

var list = new List<foo>(new []{new foo(){a="hello!",b=99}, new foo(){a="hello2",b=88}}); 
0
list.ForEach(i => i.DoStuff()); 
public void DoStuff(this foo lambda) 
{ 
    lambda.a="hello!"; 
    lambda.b=99; 
} 
4

Trung thực, có thực sự không có nhu cầu sử dụng List.ForEach đây :

foreach (var item in list) { item.a="hello!"; item.b=99; } 
Các vấn đề liên quan