PDA

View Full Version : سوال: امکان دادن چندین خروجی از یک تابع



رامین مرادی
یک شنبه 04 تیر 1396, 08:29 صبح
سلام.
دوستان امکانش هست از یک تابع چندین خروجی داشته باشیم :متفکر:
به این صورت :

public string int float Check(string n)
{
return "test",12,8.54;
}


یعنی میخوام بدونم امکان چنین کاری وجود داره؟:متفکر:
اگه آره به چه صورتی!!

esafb52
یک شنبه 04 تیر 1396, 09:18 صبح
سلام.
دوستان امکانش هست از یک تابع چندین خروجی داشته باشیم :متفکر:
به این صورت :

public string int float Check(string n)
{
return "test",12,8.54;
}


یعنی میخوام بدونم امکان چنین کاری وجود داره؟:متفکر:
اگه آره به چه صورتی!!

سلام بله ولی نا با سینتکس شما کلمه tuple رو سرچ کن کابردش همینه

Mani_rf
یک شنبه 04 تیر 1396, 11:48 صبح
سلام.
دوستان امکانش هست از یک تابع چندین خروجی داشته باشیم :متفکر:
به این صورت :

public string int float Check(string n)
{
return "test",12,8.54;
}


یعنی میخوام بدونم امکان چنین کاری وجود داره؟:متفکر:
اگه آره به چه صورتی!!

این امکان تو #C نسخه 7 اضافه شده و میتونید به صورت زیر ازش استفاده کنید:


(string, string, string) LookupName(long id) // tuple return type{
... // retrieve first, middle and last from data storage
return (first, middle, last); // tuple literal
}

منبع : Blog.Msdn (https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/)

اگر که به هردلیلی نمیتونید از VS 2017 استفاده کنید
بهترین راه اینه که یا از کلاس Tuple استفاده کنید که خوانایی بالایی نداره ولی کار مورد نظر شما رو انجام میده :

static void M(Tuple<string, string[], int, int[]> tuple) {
// Evaluate the tuple's items.
Console.WriteLine(tuple.Item1);
foreach (string value in tuple.Item2)
{
Console.WriteLine(value);
}
Console.WriteLine(tuple.Item3);
foreach (int value in tuple.Item4)
{
Console.WriteLine(value);
}
}

منبع : dotnetperls (https://www.dotnetperls.com/tuple)

و یا این که یک Class یا یک Struct بسازید و اون رو به خروجی بفرستید

رامین مرادی
یک شنبه 04 تیر 1396, 13:10 عصر
این امکان تو #C نسخه 7 اضافه شده و میتونید به صورت زیر ازش استفاده کنید:


(string, string, string) LookupName(long id) // tuple return type{
... // retrieve first, middle and last from data storage
return (first, middle, last); // tuple literal
}

منبع : Blog.Msdn (https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/)

اگر که به هردلیلی نمیتونید از VS 2017 استفاده کنید
بهترین راه اینه که یا از کلاس Tuple استفاده کنید که خوانایی بالایی نداره ولی کار مورد نظر شما رو انجام میده :

static void M(Tuple<string, string[], int, int[]> tuple) {
// Evaluate the tuple's items.
Console.WriteLine(tuple.Item1);
foreach (string value in tuple.Item2)
{
Console.WriteLine(value);
}
Console.WriteLine(tuple.Item3);
foreach (int value in tuple.Item4)
{
Console.WriteLine(value);
}
}

منبع : dotnetperls (https://www.dotnetperls.com/tuple)

و یا این که یک Class یا یک Struct بسازید و اون رو به خروجی بفرستید
من از 2013 استفاده میکنم . پس مجبورم از تاپل استفاده کنم. فقط یه سوال دیگه. اگه خروجی ما بصورت دیتاتبل باشه مثلا چهارتا دیتا تیبل مشکلی نیست؟

Mahmoud.Afrad
یک شنبه 04 تیر 1396, 13:15 عصر
من از 2013 استفاده میکنم . پس مجبورم از تاپل استفاده کنم. فقط یه سوال دیگه. اگه خروجی ما بصورت دیتاتبل باشه مثلا چهارتا دیتا تیبل مشکلی نیست؟

در اینصورت نوع متد را از نوع dataset انتخاب کنید، در بدنه متد دیتاتیبل ها رو به یک دیتاست اضافه کنید و return کنید.

shahryari
یک شنبه 04 تیر 1396, 16:01 عصر
یه کلاس بنویس و داخل کلاس میتونی هر نوع فیلدی رو تعریف کنی
در تابعت از اون کلاس نمونه بساز و مقدارهای لازم رو بده و بفرست به خروجی

parvizwpf
یک شنبه 04 تیر 1396, 22:40 عصر
کلاس Tuple که دوستمون گفت میتونه به تعداد محدودی آبجکت برگردونه:
using System;

class Program
{
static void Main()
{
// Create three-item tuple.
Tuple<int, string, bool> tuple =
new Tuple<int, string, bool>(1, "cat", true);
// Access tuple properties.
if (tuple.Item1 == 1)
{
Console.WriteLine(tuple.Item1);
}
if (tuple.Item2 == "dog")
{
Console.WriteLine(tuple.Item2);
}
if (tuple.Item3)
{
Console.WriteLine(tuple.Item3);
}
}
}

ASKaffash
دوشنبه 05 تیر 1396, 10:03 صبح
سلام
منطقی ترین روش در پست 6 گفته شده است