PDA

View Full Version : متدی با تعداد ورودی نامعلوم



ahmadi94
چهارشنبه 10 مهر 1392, 16:26 عصر
سلام دوستان میشه راهنمایی کنید که اگه بخوام یه method داشته باشم که تعداد ورودی هاش نا مشخص باشه باید چی کار کنم؟
مثلا یه آرایه که تعداد سایزش مشخص نیست رو بخوام به عنوان ورودی بدم؟

rezaricky
چهارشنبه 10 مهر 1392, 17:07 عصر
سلام
یه راهش اینه که از List استفاده کنی

ahmadi94
چهارشنبه 10 مهر 1392, 17:11 عصر
چطوری؟ میشه با کد بگی ؟
من مبتدیم آخه .
با تعداد مشخص ورودی رو بلدم اما نامشخص رو نه !
public string Breath (string category)
{
switch (category.ToLower().Trim())
{
case "bird" :
case "mammels" :
case "crawlers" :
return "Breath :Air";
case "fish" :
return "Breath :water";
default:
return "Unknown";
}
}

rezaricky
چهارشنبه 10 مهر 1392, 17:43 عصر
مثال سادهusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
class Program
{
static int Add(List<int> list)
{
int sum = 0;
foreach (int num in list)
{
sum += num;
}
return sum;
}

static void Main(string[] args)
{
List<int> mylist = new List<int>();
mylist.Add(2);
mylist.Add(3);
mylist.Add(4);
mylist.Add(5);
int sum = Add(mylist);
Console.WriteLine(sum);
Console.ReadKey();
}


}
}
یه راه دیگه استفاده از vararg's هست
public static void UseVariableParameters(params int[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
{
Console.WriteLine(list[i]);
}
Console.WriteLine();
}

public static void DemonstrateVariableParameters()
{
UseVariableParameters(1,2,3,4,5);
}

learningtv.i
چهارشنبه 10 مهر 1392, 20:46 عصر
البته به نظر من استفاده از کلمه کلیدی params خیلی بهتره.اصلا مایکروسافت اینو به همین خاطر در سی شارپ گنجانده است.
مثلا فرض کنید یک تابع جمع می خواهید بنویسید که تعداد اعداد صحیحی که جمع می کنه متغیر هست یه بار 5 تا ورودی ، یه بار 100 تا ورودی و....
کافیست که قبل از پارامتری که می خواهید کلمه کلیدی params را بیاورید.


static int myFunction(out int result, params int[] val)
{
result = 0;
foreach (int item in val)
{
result += item;
}
return result;
}

در تابع myFunction همانطور مشاهده می کنید ما یک آرایه از نوع Int داریم که قبل آن کلمه کلیدی params به کار رفته است این به کامپایلر می گوید که تعداد ورودی متغیر باشد.هربار داخل یک حلقه foreach اعضای آرایه جمع شده و حاصل نهایی به عنوان جواب return می شود.

مثلا فراخوانی می تواند به صورت های زیر باشد.هیچکدام مشکلی پیش نمی آید.هر بار هم متغیر هست.


myFunction(out result,1,2,3,4,5,7,8,100,200)


myFunction(out result,9,30,40,5,200)

نکته ی مهم هست پارامتری که از params استفاده می کند باید در لیست پارامتر های تابع اخرین پارامتر باشد.

اگه می خواهید بر روی کار بار پارامتر های توابع از جمله همین مطلب، یا پارامتر های اختیاری(Optional Parameter) یا پارامتر های نامگذاری شده (Named Parameter) یا فراخوانی با ارجاع و مقدار و پارامتر های ref و Out مسلط شوید پیشنهاد می کنم ویدئوی زیر را حتما دانلود کنید و ببنید.
لینک مطلب:http://learningtv.ir/?p=1762