تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
Tuple Return Type in C#7.0
#1
بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي أمري وأحلل عقدة من لساني يفقهوا قولي))

Tuple Return Type in C#7.0

أحببت اليوم أن أتلكم عن ميزة جديدة في لغة C#.NET ألا وهي (Tuple Return Type) طبعا هذه الميزة أتت في الاصدار C#.NET 7.0 وبيئة التطوير VisualStudio 2017.


طيب ماذا تعني (Tuple Return Type)؟


هي ميزة تتيح لك أن تكتب دالة ترجع أكثر من قيمة. (Multi Return Function).


لنبيّن ذلك بمثال:
تخيل أنه لديك جدول (EmpTbl) وتريد أن تكتب دالة ترجع (Ename, Esal) اعتمادا على الــ(ID). المشكلة التي تواجهك هنا أنه كيف لي أن أقوم بكتابة دالة ترجع أكثر من قيمة؟ 
الحل هو باستخدام (Tuple Return Type).

طيب لنتعرف كيف تستخدم هذه الميزة:
قبل كل شيء يجب أن تضيف مكتبة: system.ValueTuple من NuGet لتتمكن من استخدام هذه الميزة.

1- صيغة كتابة الدالة تكون بالشكل التالي:

PHP كود :
(datatypedatatype,....) FuncName(parameter)
{
return (
valuevalue);

والاستدعاء تكون بلشكل التالي:
PHP كود :
var func=FuncName(argument)
Console.WriteLine(func.Item1);
Console.WriteLine(func.Item2); 
ملاحظة/ من الممكن استخدام (Named Argument) فتكون صيغة كتابة الدالة بالشكل التالي:
PHP كود :
(datatype datanamedatatype dataneme,....) FuncName(parameter)
{
return (
datanamevalue,datanamevalue);

والاستدعاء ستكون بالصيغة التالية:
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<EmpTblEmpList;
 
       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 Enamedouble EsalEmpSearch(int ID)
 
       {
 
           var emp EmpList.SingleOrDefault(id => id.ID == ID);
 
           var ename emp.Ename;
 
           var esal emp.Esal;
 
           return (EnameenameEsalesal); //Named Argument
 
       }
 
   }

 
   class EmpTbl
    
{
 
       public int ID getset; }
 
       public string Ename getset; }
 
       public double Esal getset; }
 
   }

والحمد لله رب العالمين
الرد }}}
#2
سبحان الله
اذا شكل الكود يفتح النفس
مرتب و كم سطر و مختصر
Multi Return Function
يعني ليس شرط ان تعود لنا فقط بقيمتين !!
طيب اخوي سجاد هذا لمتغير نصي
كيف راح يكون الكود لو طلبنا يعود لنا بصورة
فرضا لو كان نوع الحقل BLOB بعد تحويلها الى Byte
الرد }}}
تم الشكر بواسطة: Sajad , ابو ليلى
#3
نعم من الممكن أن استرجاع اكثر من ذلك، وبأي نوع من انواع البيانات.

بالنسبة لسؤال لا يحتاج الى Tuple Return لذا ستكون دالة ارجاع الصورة بهذا الشكل:

PHP كود :
  private Image ConvertToImage(byte[] imgBytes)
 
       {
 
           return Image.FromStream(new MemoryStream(imgBytes));
 
       
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy , Amir_Alzubidy , ابو ليلى
#4
ما شاء الله عليك اخوي سجاد
الله يفتح عليك و يزيدك علم
و يبارك فيك
طيب لو حبينا نسند هذه القيمة الى صورة على الفورم
كيف راح يكوون شكل الكود Smile بطبيعة الحال الاسناد من الجدول الى التولز .
وجزاك الله خير
الرد }}}
تم الشكر بواسطة: ابو ليلى , Sajad , Sajad
#5
ويبارك فيك ايضا اخي الكريم

ببساطة الحل سيكون بهذا الشكل:
PHP كود :
PicBox.Image ConvertToImage((byte[])myRow["Emp_Image"]); 

هذا طبعا اثناء استدعاء الدالة ستمرر له حقل الimage كمصفوفة من bytes وهذا يعتمد على الطريقة التي تجلب بها حقل الصورة من الجدول، انا اساتخدمت DataRow لجلب البيانات لهذا ترى اسم المتغير myRow.

أما اذا اردت ان تدمج ارجاع الصورة مع المعلومات باستخدام Tuple Return سيكون الحل بهذا الشكل:
PHP كود :
static (string Enamedouble Esal,Image ImgEmpSearch(int ID)
 
       {
 
           var emp EmpList.SingleOrDefault(id => id.ID == ID);
 
           var ename emp.Ename;
 
           var esal emp.Esal;
 
           var imgBytes Image.FromStream(new MemoryStream(emp.ImageBytes)); 

 
           return (EnameenameEsalesalImgimgBytes); //Named Argument
 
       

ImageBytes: عبارة عن Property داخل الكلاس من نوع byte[].

تحياتي لكم
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy , Amir_Alzubidy
#6
هذا هو المطلوب 100 %
جزاك الله خير اخوي سجاد
الرد }}}
تم الشكر بواسطة: Sajad , Sajad


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  Anonymous Type #2 Sajad 0 1,795 03-03-19, 09:49 PM
آخر رد: Sajad
  Anonymous Type #1 Sajad 1 2,215 03-03-19, 12:51 AM
آخر رد: Amir_Alzubidy
  C# Dynamic Type Abu Ehab 1 1,988 30-09-17, 12:14 AM
آخر رد: sendbad100
  Tuple in C Sharp Abu Ehab 4 3,284 14-03-17, 03:02 AM
آخر رد: الشاكي لله
  Type Casting In C#.NET Sajad 4 3,600 24-06-16, 02:23 AM
آخر رد: Sajad

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم