22-07-17, 12:10 PM
بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي أمري وأحلل عقدة من لساني يفقهوا قولي))
Tuple Return Type in C#7.0
أحببت اليوم أن أتلكم عن ميزة جديدة في لغة C#.NET ألا وهي (Tuple Return Type) طبعا هذه الميزة أتت في الاصدار C#.NET 7.0 وبيئة التطوير VisualStudio 2017.
لنبيّن ذلك بمثال:
تخيل أنه لديك جدول (EmpTbl) وتريد أن تكتب دالة ترجع (Ename, Esal) اعتمادا على الــ(ID). المشكلة التي تواجهك هنا أنه كيف لي أن أقوم بكتابة دالة ترجع أكثر من قيمة؟
طيب ماذا تعني (Tuple Return Type)؟
هي ميزة تتيح لك أن تكتب دالة ترجع أكثر من قيمة. (Multi Return Function).
لنبيّن ذلك بمثال:
تخيل أنه لديك جدول (EmpTbl) وتريد أن تكتب دالة ترجع (Ename, Esal) اعتمادا على الــ(ID). المشكلة التي تواجهك هنا أنه كيف لي أن أقوم بكتابة دالة ترجع أكثر من قيمة؟
الحل هو باستخدام (Tuple Return Type).
طيب لنتعرف كيف تستخدم هذه الميزة:
قبل كل شيء يجب أن تضيف مكتبة: system.ValueTuple من NuGet لتتمكن من استخدام هذه الميزة.
1- صيغة كتابة الدالة تكون بالشكل التالي:
PHP كود :
(datatype, datatype,....) FuncName(parameter)
{
return (value, value);
}
والاستدعاء تكون بلشكل التالي:
PHP كود :
var func=FuncName(argument)
Console.WriteLine(func.Item1);
Console.WriteLine(func.Item2);
ملاحظة/ من الممكن استخدام (Named Argument) فتكون صيغة كتابة الدالة بالشكل التالي:
PHP كود :
(datatype dataname, datatype dataneme,....) FuncName(parameter)
{
return (dataname: value,dataname: value);
}
والاستدعاء ستكون بالصيغة التالية:
PHP كود :
var func=FuncName(argument)
Console.WriteLine(func.dataname);
Console.WriteLine(func.dataname);
ويفضل أن تستخدم الطريقة الثانية.
مثال توضيحي:
PHP كود :
using System;
using System.Collections.Generic;
using System.Linq;
namespace TupleReturnType
{
class Program
{
static List<EmpTbl> EmpList;
static void Main(string[] args)
{
EmpList = new List<EmpTbl>
{
new EmpTbl
{
ID = 1,
Ename = "Ahmed",
Esal = 33000
},
new EmpTbl
{
ID=2,
Ename="Amjed",
Esal=444.666
}
};
var emp = EmpSearch(EmpList[0].ID);
Console.WriteLine(emp.Ename);//With named argument
Console.WriteLine(emp.Esal);//With named argument
Console.ReadKey();
}
static (string Ename, double Esal) EmpSearch(int ID)
{
var emp = EmpList.SingleOrDefault(id => id.ID == ID);
var ename = emp.Ename;
var esal = emp.Esal;
return (Ename: ename, Esal: esal); //Named Argument
}
}
class EmpTbl
{
public int ID { get; set; }
public string Ename { get; set; }
public double Esal { get; set; }
}
}
والحمد لله رب العالمين