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


117

Cho một lớp:

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

Sau đó, một danh sách chung về chúng:

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 List<T> ForEach()phương thức sau , có cách nào đơn giản hơn để thực hiện điều đó bên dưới không? Hy vọng rằ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());

Chỉnh sửa: Tưởng ForEach()là một phương pháp mở rộng LINQ, nhưng nó thực sự là một phần của rất List<T>tiếc!


Tôi không có bất kỳ manh 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 luận của mã này. Bạn có thể vui lòng định nghĩa Hành động là gì không?
Anwar

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

Câu trả lời:


265

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

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


11
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ể chỉ định chúng khi tạo danh sách như:

var list = new List<foo>(new []{new foo(){a="hello!",b=99}, new foo(){a="hello2",b=88}}); 

3
list.ForEach(i => i.DoStuff());
public void DoStuff(this foo lambda)
{
  lambda.a="hello!"; 
  lambda.b=99;
}

3

Thành thật mà nói, thực sự không cần phải sử dụng List.ForEach ở đây:

foreach (var item in list) { item.a="hello!"; item.b=99; }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.