کار نکردن تمامی خط های foreach - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

کار نکردن تمامی خط های foreach

0 امتیاز

با سلام.....من این کدو زدم که یک تابع از جنس string هست که توش اعصای داخل لیست و return  کنه اما اولا فقط خط اولش کار می کنه ،،،،،،،،ثانیا فقط یک عضو از لیست رو نشون می ده..اینم کدم

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace final
{
   public  class memberworks
    {
      public static List<Members> member = new List<Members>();
      public string show()
        {
            foreach (Members mems in member)
            {
                return mems.Firstname  ;
                return mems.Lastname;
                return mems.Method;
                return mems.Nation;
                return mems.birth;
                return mems.dead;
                return mems.tozih;

            }
            return "finished";
        }

    }
}

که  متغیر های firstname و اینا تو یه کلاس دیگه تعریف شدن........ و بعد در فرم این تابع  صدا زده بشه

()label1.text=memberswork.show

 

سوال شده خرداد 27, 1393  بوسیله ی Sher228 (امتیاز 167)   18 33 44
دوباره تگ گذاری شد خرداد 28, 1393 بوسیله ی BlueBlade

2 پاسخ

+3 امتیاز

سلام

شما توی هر ساختاری مثل شرط یا حلقه یا متد، وقتی از دستور return استفاده می کنید و برنامه به اجرای این دستور می رسه مقدار جلوی اون رو به فراخواننده برمیگردونه و دیگه ادامه اون ساختار شرط یا حلقه یا متد رو اجرا نمی کنه. در کد شما هم وقتی برنامه به اولین return می رسه فقط مقدار اون رو به فرم شما برمیگردونه و دیگه مابقی دستورات حلقه و تابع رو اجرا نمی کنه.

اگر شما می خواهید در متن لیبل 1  مشخصات تمام اعضا رو بنویسید می تونید مشخصات اعضا  رو توی یک رشته متنی بنویسید و بعد اون رشته رو به فرم برگردونید تا در متن لیبل نمایش بده:

public string show()
        {
            string txt= "";

            foreach (Members mems in member)
            {
                txt += mems.Firstname  ;
                txt += mems.Lastname;
                txt += mems.Method;
                txt += mems.Nation;
                txt += mems.birth;
                txt += mems.dead;
                txt += mems.tozih;
 
            }
            txt += "finished";
            return txt;
        }

 

پاسخ داده شده خرداد 27, 1393 بوسیله ی ifelse (امتیاز 192)   1 1 2
+4 امتیاز

سلام دوست عزیز

روش معقول (البته به نظر من) اینه که Object رو برگردونی


public Member Show()
{
      public static List<Members> member = new List<Members>();
   
            foreach (Members mems in member)
            {
                return mems;
            }
            return null;
}

بعد در قسمت مربوطه تابع رو فرخوانی کن و از اعضاش استفاده کن

البته توجه کن که کدت مشکل اساسی داره و اون اینه که مقدار اول لیستت رو برمیگردونی من حدث میزنم که میخوایی به ترتیب مقادیر این لیست رو فرا بخونی که برای این کار تغییر زیر رو باید بدی

      public static List<Members> member = new List<Members>();
      public Members show()
        {
            foreach (Members mems in member)
            {
              yield  return mems;
            }
return null;
        }
 
    }

yield باعث میشه که عناصر لیست یکی یکی return بشن اگه توضیح بیشتر میخوایی بگو تابهت بگم

درضمن من از کد خودت استفاده کردم ولی به نظرم کدت اشتباهه

 

پاسخ داده شده خرداد 27, 1393 بوسیله ی alixw24 (امتیاز 656)   2 5 13
ممنون می شم اگر بیشتر توضیح بدین و یا حتی چیزی به جای yield  بگین چون اصلا با هاش آشنایی ندارم..من می خوام تمامی مقادیری که د لیست هست برگردونم ،،،،،،،،،باید چی کار کنم؟؟؟؟؟؟؟
با تشکر
سلام دوست عزیز
میتونی از این مثال استفاده کنی  :

  public class myitems
        {
            public string _name;
            public int _id;
            public myitems(string name,int id)
            {
                _name = name;
                _id = id;
            }
        }

         public  IEnumerator<myitems> GetEnumerator()
        {
            List<myitems> list = new List<myitems>();
            list.Add(new myitems("ali", 1));
            list.Add(new myitems("mohamad", 2));
            list.Add(new myitems("reza", 3));
            list.Add(new myitems("hosien", 4));

            foreach(myitems i in list)
            {
                yield return i;
            }
            yield break;
        }

        static void Main(string[] args)
        {
            Program p = new Program();
            foreach (myitems i in p)
            {
                Console.WriteLine(i._name,"\t" ,i._id);
            }

            Console.ReadKey();

        }
ممنون,,,,,,,,,,,,,,,اگر بخوام چیزهایی که قزاره ادد بشه،،،،،،،،،،،،عبارات داخل تکس باکس باشه چی؟؟؟؟؟
می شخ کمی در مورد yield  و تابع Ienumerator توضیح بدین؟؟؟؟؟؟
...