एक सूची में कई गुण सेट करें <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>उफ़ का हिस्सा है !


मुझे आपके उत्तर के लिए कोई सुराग नहीं है, लेकिन मुझे इस कोड की कार्यप्रणाली के लिए बहुत दिलचस्पी है। क्या आप कृपया परिभाषित कर सकते हैं कि एक्शन क्या है?
अनवर

4
ऐसा नहीं है कि यह मायने रखता है, लेकिन यह एक तरीका है List<T>और LINQ नहीं है। इसके अलावा, आप var list = new List<foo>() { new foo(), new foo() };
मार्क

जवाबों:


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
list.ForEach(i => i.DoStuff());
public void DoStuff(this foo lambda)
{
  lambda.a="hello!"; 
  lambda.b=99;
}

3

ईमानदारी से, यहां वास्तव में List.ForEach का उपयोग करने की कोई आवश्यकता नहीं है:

foreach (var item in list) { item.a="hello!"; item.b=99; }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.