English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسي C#

دليل متقدم C#

C# موجه الأعمال (OOP)

Tuple في C#

تم إدخال فئة Tuple<T> في .NET Framework 4.0. هيكل البيانات هو نوع من بنية البيانات التي تحتوي على سلسلة من العناصر المختلفة. يمكن استخدامها لتحديد بنية البيانات للاحتفاظ بالأجسام التي تحتوي على الخصائص، دون الحاجة إلى إنشاء نوع جديد.

النحو:

Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>

في المثال التالي، يتم إنشاء tuple يحتوي على ثلاثة عناصر:

Tuple<int, string, string> person = new Tuple<int, string, string>(1, "Steve", "Jobs");

في المثال السابق، قمنا بإنشاء Tuple يحتوي على مثال على سجلات شخص. قمنا بتحديد نوع كل عنصر وتم نقل القيم إلى بناء الحقل. تحديد نوع كل عنصر أمر مزعج. قدمت C# مساعدًا ثابتًا Tuple، يرجع هذا الكائن إلى مثال Tuple <T> دون الحاجة إلى تحديد نوع كل عنصر، كما هو موضح أدناه.

var person = Tuple.Create(1, "Steve", "Jobs");

يمكن أن تحتوي المجموعة على عشرة عناصر فقط. عند محاولة تضمين عشرة عناصر أو أكثر، سيحدث خطأ في التجميع.

var numbers = Tuple.Create(1, 2, 3, 4, 5, 6, 7, 8);

مثال: الوصول إلى عناصر المجموعة

يمكن الوصول إلى عناصر المجموعة من خلال خاصية Item < elementnumber >، مثل Item1،Item2،Item3، إلخ، يمكن الوصول إلى معظم خاصية Item7. تعود خاصية Item1 إلى العنصر الأول، Item2 إلى العنصر الثاني، وهكذا. سيتم استخدام خاصية Rest لاستقبال العنصر الأخير (العنصر الثامن).

var person = Tuple.Create(1, "Steve", "Jobs");
person.Item1;  // عودة 1
person.Item2;  // عودة "Steve"
person.Item3;  // عودة "Jobs"
var numbers = Tuple.Create("One", 2, 3, "Four", 5, "Six", 7, 8);
numbers.Item1;  // عودة "One"
numbers.Item2; // يعود 2
numbers.Item3;  // عودة 3
numbers.Item4;  // عودة "Four"
numbers.Item5;  // عودة 5
numbers.Item6;  // عودة "Six"
numbers.Item7;  // عودة 7
numbers.Rest;  // عودة (8)
numbers.Rest.Item1;  // عودة 8

عادةً، يستخدم الموقع الثامن للمجموعات المتداخلة، يمكنك استخدام خاصية Rest لاستقبال هذا الموقع.

المجموعات المتداخلة

إذا كان من المطلوب تضمين ثمانية عناصر أو أكثر في مجموعة، يمكن تحقيق ذلك عن طريق إدراج مجموعة أخرى كعنصر ثامن. يمكن استخدام خاصية Rest لاستقبال آخر مجموعة متداخلة. للوصول إلى عناصر مجموعة متداخلة، استخدم خاصية Rest.Item1.Item<elementNumber>.

var numbers = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, 9, 10, 11, 12, 13));
numbers.Item1; // يعود 1
numbers.Item7;  // عودة 7
numbers.Rest.Item1;  // عودة (8,9,10,11,12,13)
numbers.Rest.Item1.Item1; // يعود 8
numbers.Rest.Item1.Item2; // يعود 9

يمكنك تضمين كائنات التكوينات المدمجة في أي مكان في السلسلة. ولكن، يُنصح بوضع التكوينات المدمجة في نهاية السلسلة، لكي يمكنك استخدام خاصية Rest لاستدعاءها.

var numbers = Tuple.Create(1, 2, Tuple.Create(3, 4, 5, 6, 7, 8), 9, 10, 11, 12, 13);
numbers.Item1; // يعود 1
numbers.Item2; // يعود 2
numbers.Item3; // يعود (3, 4, 5, 6, 7, 8)
numbers.Item3.Item1; // يعود 3
numbers.Item4; // يعود 9
numbers.Rest.Item1; // يعود 13

استخدام التكوينات كمعامل دالة

يمكن للدوال أن تأخذ التكوينات كمعامل.

static void Main(string[] args)
{
		var person = Tuple.Create(1, "Steve", "Jobs");
    DisplayTuple(person);
}
static void DisplayTuple(Tuple<int,string,string> person)
{
    Console.WriteLine($"Id = { person.Item1}");
    Console.WriteLine($"First Name = { person.Item2}");
    Console.WriteLine($"Last Name = { person.Item3}");
}

استخدام التكوينات كنوع للرجوع

يمكن للتكوينات أن تعود من الدوال.

static void Main(string[] args)
{
		var person = GetPerson();
}
static Tuple<int, string, string> GetPerson() 
{
		return Tuple.Create(1, "Bill", "Gates");
}

استخدام التكوينات

يمكن استخدام التكوينات في الحالات التالية:

  1. عندما ترغب في رجوع عدة قيم من دالة دون استخدام معامل ref أو out...

  2. عندما ترغب في نقل عدة قيم إلى دالة باستخدام معامل واحد...

  3. عندما ترغب في حفظ سجلات قاعدة البيانات أو بعض القيم مؤقتًا دون إنشاء فئة منفردة...

عيوب التجميع:

  1. Tuple هو نوع مرجعي وليس نوع قيمة. يتم تخصيصه على الجهاز، مما قد يؤدي إلى عمليات معالجة CPU مكثفة.

  2. يتم تقييد Tuple لتشمل ثمانية عناصر. إذا كنت بحاجة إلى تخزين المزيد من العناصر،则需要 استخدام تكرار التجميع. ولكن قد يؤدي ذلك إلى عدم وضوح.

  3. يمكن الوصول إلى عناصر Tuple باستخدام نمط الاسم Item <elementNumber> للخصائص، وهو أمر غير معقول.

تم إدخال ValueTuple في C#7 لتحسين قيود Tuple وجعل استخدامه أسهل. اكتشف ذلك في الفصل القادم.