একটি তালিকায় একাধিক বৈশিষ্ট্য সেট করুন <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()একটি লিনকিউ এক্সটেনশন পদ্ধতি ছিল, যখন এটি আসলে উফগুলির অংশ List<T>!


আপনার উত্তরের জন্য আমার কোনও ধারণা নেই তবে আমি এই কোডের এই পদ্ধতিটির জন্য খুব আগ্রহী। আপনি কি দয়া করে সংজ্ঞা দিতে পারেন একটি অ্যাকশন কী?
আনোয়ার

4
এটি গুরুত্বপূর্ণ যে নয়, তবে এটি একটি পদ্ধতি List<T>এবং এটি লিনকিউ নয়। এছাড়াও, আপনি নিজের তালিকা তৈরি করতে পারেন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

সত্যিই, এখানে লিস্ট ব্যবহার করার দরকার নেই .এখানে প্রতিটি:

foreach (var item in list) { item.a="hello!"; item.b=99; }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.