ตั้งค่าคุณสมบัติหลายรายการในรายการ <T> ForEach ()?


117

ให้ชั้นเรียน:

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

จากนั้นรายการทั่วไปของพวกเขา:

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

หากฉันต้องการกำหนดคุณสมบัติหลายรายการภายในList<T> ForEach()วิธีการต่อไปนี้มีวิธีที่ง่ายกว่านี้ไหม หวังว่าฉันจะหนาขึ้น

// 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());

แก้ไข: ความคิดForEach()เป็นวิธีการขยาย LINQ เมื่อเป็นส่วนหนึ่งของList<T>โอ๊ะโอ!


ฉันไม่มีเงื่อนงำสำหรับคำตอบของคุณ แต่ฉันสนใจวิธีการนี้ของรหัสนี้มาก คุณช่วยระบุได้ไหมว่า Action คืออะไร?
อันวาร์

4
ไม่ใช่ว่าจะสำคัญ แต่นี่เป็นวิธีการList<T>และไม่ใช่ LINQ นอกจากนี้คุณสามารถสร้างรายการของคุณด้วยvar list = new List<foo>() { new foo(), new foo() };
Marc

คำตอบ:


265

สิ่งที่คุณต้องทำคือแนะนำวงเล็บเพื่อให้วิธีการไม่ระบุชื่อของคุณสามารถรองรับหลายบรรทัด:

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


11
list.ForEach(lamba=>lambda.a="hello!"); 

กลายเป็น

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

แน่นอนคุณสามารถกำหนดได้เมื่อคุณสร้างรายการเช่น:

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


3

จริงๆแล้วไม่จำเป็นต้องใช้ ListForEach ที่นี่:

foreach (var item in list) { item.a="hello!"; item.b=99; }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.