List <T> ForEach ()?


117

Bir sınıf verildiğinde:

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

Sonra bunların genel bir listesi:

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

Aşağıdaki yöntemin içinde birden çok özellik atayacaksam List<T> ForEach(), bunu aşağıda yapmanın daha basit bir yolu var mı? Umarım biraz kalınlaşırım.

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

Düzenleme: ForEach()Aslında List<T>oops'un bir parçasıyken LINQ genişletme yöntemiydi !


Cevabınız için hiçbir fikrim yok, ancak bu kodun bu metodolojisiyle çok ilgileniyorum. Lütfen bir Eylemin ne olduğunu tanımlayabilir misiniz?
Anwar

4
Önemli olduğundan değil, ama bu bir yöntemdir List<T>ve LINQ değildir. Ayrıca, listenizivar list = new List<foo>() { new foo(), new foo() };
Marc

Yanıtlar:


265

Tek yapmanız gereken, anonim yönteminizin birden çok satırı destekleyebilmesi için bazı köşeli parantezler eklemektir:

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


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

Oluyor

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

Elbette, aşağıdaki gibi bir liste oluşturduğunuzda bunları da atayabilirsiniz:

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

Dürüst olmak gerekirse List.ForEach'i kullanmaya gerçekten gerek yok:

foreach (var item in list) { item.a="hello!"; item.b=99; }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.