นี่เป็นส่วนหนึ่งของไวยากรณ์ของ collection initializer ใน. NET คุณสามารถใช้ไวยากรณ์นี้กับคอลเลกชันใดก็ได้ที่คุณสร้างตราบใดที่:
สิ่งที่เกิดขึ้นคือตัวสร้างเริ่มต้นถูกเรียกและจากนั้นAdd(...)
จะถูกเรียกสำหรับสมาชิกแต่ละคนของ initializer
ดังนั้นสองบล็อกนี้จึงเหมือนกันโดยประมาณ:
List<int> a = new List<int> { 1, 2, 3 };
และ
List<int> temp = new List<int>();
temp.Add(1);
temp.Add(2);
temp.Add(3);
List<int> a = temp;
คุณสามารถเรียกตัวสร้างทางเลือกได้หากคุณต้องการตัวอย่างเช่นเพื่อป้องกันการปรับขนาดมากเกินไปในList<T>
ระหว่างการเจริญเติบโตเป็นต้น:
// Notice, calls the List constructor that takes an int arg
// for initial capacity, then Add()'s three items.
List<int> a = new List<int>(3) { 1, 2, 3, }
โปรดทราบว่าAdd()
วิธีนี้ไม่จำเป็นต้องใช้รายการเดียวตัวอย่างเช่นAdd()
วิธีการDictionary<TKey, TValue>
รับสองรายการ:
var grades = new Dictionary<string, int>
{
{ "Suzy", 100 },
{ "David", 98 },
{ "Karen", 73 }
};
คล้ายกับ:
var temp = new Dictionary<string, int>();
temp.Add("Suzy", 100);
temp.Add("David", 98);
temp.Add("Karen", 73);
var grades = temp;
ดังนั้นในการเพิ่มสิ่งนี้ในชั้นเรียนของคุณเองสิ่งที่คุณต้องทำตามที่กล่าวไว้คือใช้งานIEnumerable
(อีกครั้งโดยเฉพาะอย่างยิ่งIEnumerable<T>
) และสร้างวิธีการอย่างน้อยหนึ่งAdd()
วิธี:
public class SomeCollection<T> : IEnumerable<T>
{
// implement Add() methods appropriate for your collection
public void Add(T item)
{
// your add logic
}
// implement your enumerators for IEnumerable<T> (and IEnumerable)
public IEnumerator<T> GetEnumerator()
{
// your implementation
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
จากนั้นคุณสามารถใช้งานได้เหมือนกับที่คอลเลกชัน BCL ทำ:
public class MyProgram
{
private SomeCollection<int> _myCollection = new SomeCollection<int> { 13, 5, 7 };
// ...
}
(สำหรับข้อมูลเพิ่มเติมโปรดดูMSDN )