PDA

View Full Version : سوال: انتقال array list به عنوان پارامتربه متد



bargesabz
یک شنبه 20 مرداد 1387, 00:04 صبح
سلام به همگی



publicArrayList sumarray = newArrayList();


این ArrayList رو چه طوری می تونیم به یه متد که قرار مجموع عناصر اونو به دست میاره انتقال بدیم خیلی ممنون می شم اگه کد رو زود به دستم برسونید چون برام خیلی خیلی لازمه

nilmil_nil
یک شنبه 20 مرداد 1387, 01:14 صبح
ببین این کد بدردت می خوره





public ArrayList sum = new ArrayList();

publicvoid MY(ArrayList aaa)
{
MessageBox.Show(aaa.Count.ToString());
}

بعد تو هر جا که خواستی فراخونی کن این کد فراخونی

sum.Add("hhhh");// set variable by value
MY(sum);

bargesabz
یک شنبه 20 مرداد 1387, 12:36 عصر
دست شما درد نکنه دوست عزیز
فکر می کنم من سوال رو اشتباه گفتم منظور من چگونه معرفی کردن array listبه عنوان پارامتر و دسترسی به تک تک عناصر array list بود

hdv212
یک شنبه 20 مرداد 1387, 13:01 عصر
private void button7_Click(object sender, EventArgs e)
{
System.Collections.ArrayList list = new System.Collections.ArrayList();
list.Add("123");
list.Add("456");
list.Add("789");
this.PrintArrayListElements(list);
}

private void PrintArrayListElements(System.Collections.ArrayLis t list)
{
for (int i = 0; i < list.Count; i++)
{
MessageBox.Show(list[i].ToString());
}
}

KambizZandi
یک شنبه 20 مرداد 1387, 14:44 عصر
براي کلاسهايي که IEnumerable رو Implement کردن بهتره که از foreach استفاده کنيد:


foreach (object obj in list)
{
//use obj insted of list[n]
}

bargesabz
دوشنبه 21 مرداد 1387, 00:56 صبح
با درود به همه دوستان
جناب ارژنگ من از شما خیلی ممنونم شما طرز تفکر جالبی دارید و دلم میخواست که شما استاد برنامه نویسی من بودید چون برنامه نویسی رو اصولی یاد می گرفتم.
راستش من در یه برنامه از برای array list نگهداری یک سری رشته استفاده می کنم و در یک قسمت برنامه باید این array list رو به یه متد بفرستم که تک تک عناصر رو بخونه و اعمال مورد نظر رو برای هریک انجام بده.
من معمولا با عناصری که قبلا کار نکردم و اولین بارکه باهاشون برنامه نویس می کنم ابتدا یه برنامه ساده تر برای خودم مینویسم تا کار کردن با اون دستم بیاد.
برای این مورد هم برای اینکه بدونم چه جوری می تونم یه array list رو به عنوان پارامتر به متد بفرستم ابتدا خواستم که یه array list که شامل اعداد است رو به یه متد بفرستم و مجموع اونها رو به دست بیارم که کار کردن با array list و اینکه می تونیم از کدوم خوا ص و ....اون در متد می تونم استفاده کنم دستم بیاد به نظرم این راحت تره تا اینکه با یه array list که عناصر اون بالاتر از 50 است کار کنی. اشتباه من این بود که همانند آرایه اسم array list را با[] که با راهنمایی دوستان مشکلم حل شد


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


System.Collections.ArrayList list = new System.Collections.ArrayList();
لازمه که System.Collections نیز نوشته بشه میشه فقط ازArrayListبه تنهایی استفاده کرد؟

hdv212
دوشنبه 21 مرداد 1387, 01:42 صبح
لازمه که System.Collections نیز نوشته بشه میشه فقط ازArrayListبه تنهایی استفاده کرد؟
بله درسته حق با شماست، من فضای نام مورد نظر رو یادم رفت یاد آوری کنم، ولی شما به جای کدتو میتونید از این فضای نام در ابتدای سورس کدتون استفاده کنید تا نیازی به ذکر فضاهای نام در زمان تعریف متغیر نداشته باشید :

using System.Collections;

و اما پیشنهادی برای شما
نظر به اینکه شما میخواهید لیستی از رشته ها رو نگهداری کنید، بهتره که از Generic ها استفاده کنید، این کلاسها خاصیت Strongly-Typed برنامه های دات نت رو بیشتر میکنند و از بروز خطاهای احتمالی در زمان اجرا که معمولا در اثر Type-Casting یا تبدیل انواع به وجود میاد جلوگیری میکنن، نکته ی دیگه در ارتباط به عملکرد برنامه ست که زمانی که شما آبجکتی رو در ArrayList ذخیره میکنید، آبجکت ArrayList متغیر شما رو به نوع object تبدیل میکنه و ذخیره میکنه (به این عمل Boxing گفته میشه)، و زمانی که بخواهید به آیتمهای ArrayListتون دسترسی داشته باشید، باید اونا رو به Type مورد نظرتون تبدیل کنید (که به این عمل UnBoxing) گفته میشود که باعث ایجاد سربار حافظه در برنامه ی شما میشه، پس بهتره که از Generics استفاده کنید، بدین شکل :

private void button7_Click(object sender, EventArgs e)
{
System.Collections.Generic.List<string> list = new List<string>();
list.Add("123");
list.Add("456");
list.Add("789");
this.PrintArrayListElements(list);
}

private void PrintArrayListElements(System.Collections.Generic. List<string> list)
{
foreach (string s in list)
{
MessageBox.Show(s);
}
}
در ضمن فضای نامش رو هم ذکر کردم!
موفق باشید.

اَرژنگ
دوشنبه 21 مرداد 1387, 02:29 صبح
با درود به همه دوستان
جناب ارژنگ من از شما خیلی ممنونم شما طرز تفکر جالبی دارید و دلم میخواست که شما استاد برنامه نویسی من بودید چون برنامه نویسی رو اصولی یاد می گرفتم.
راستش من در یه برنامه از برای array list نگهداری یک سری رشته استفاده می کنم و در یک قسمت برنامه باید این array list رو به یه متد بفرستم که تک تک عناصر رو بخونه و اعمال مورد نظر رو برای هریک انجام بده.
من معمولا با عناصری که قبلا کار نکردم و اولین بارکه باهاشون برنامه نویس می کنم ابتدا یه برنامه ساده تر برای خودم مینویسم تا کار کردن با اون دستم بیاد.
برای این مورد هم برای اینکه بدونم چه جوری می تونم یه array list رو به عنوان پارامتر به متد بفرستم ابتدا خواستم که یه array list که شامل اعداد است رو به یه متد بفرستم و مجموع اونها رو به دست بیارم که کار کردن با array list و اینکه می تونیم از کدوم خوا ص و ....اون در متد می تونم استفاده کنم دستم بیاد به نظرم این راحت تره تا اینکه با یه array list که عناصر اون بالاتر از 50 است کار کنی. اشتباه من این بود که همانند آرایه اسم array list را با[] که با راهنمایی دوستان مشکلم حل شد
array list قدیمی شده و روشهایه بهتری وجود دارند، کاری که شما میخواهید انجام بدید را اگر با IEnumerable انجام بدید یک چیزی یاد میگیرید وگرنه با array list فقط یک جزعیات را یاد میگیرید. در مورد Generic List پژوهش کنید.