เพื่อนร่วมงานถามฉันในวันนี้ว่าจะเพิ่มช่วงลงในคอลเล็กชันได้อย่างไร Collection<T>
เขามีชั้นเรียนที่สืบทอดจาก มีคุณสมบัติรับอย่างเดียวประเภทนั้นที่มีบางรายการอยู่แล้ว เขาต้องการเพิ่มรายการในคอลเล็กชันอื่นในคอลเล็กชันคุณสมบัติ เขาทำแบบ C # 3-friendly ได้อย่างไร? (สังเกตข้อ จำกัด เกี่ยวกับคุณสมบัติ get-only ซึ่งป้องกันโซลูชันเช่นการทำ Union และการกำหนดใหม่)
แน่นอน foreach กับ Property แอดจะทำงาน แต่List<T>
AddRange สไตล์จะดูหรูหรากว่ามาก
ง่ายพอที่จะเขียนวิธีการขยาย:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
แต่ฉันมีความรู้สึกว่าฉันกำลังคิดค้นล้อใหม่ ฉันไม่พบอะไรในที่คล้ายกันSystem.Linq
หรือmorelinq
ออกแบบไม่ดี? แค่โทรเพิ่ม? หายไปอย่างชัดเจน?
ICollection<T>
ดูเหมือนจะไม่มีAdd
วิธีการ msdn.microsoft.com/en-us/library/… อย่างไรก็ตามCollection<T>
มีหนึ่ง
Add(T item)
ตั้งแต่แรก? ดูเหมือนเป็นวิธีการแบบครึ่งๆกลางๆเพื่อเสนอความสามารถในการเพิ่มรายการเดียวจากนั้นคาดว่าผู้โทรทั้งหมดจะวนซ้ำเพื่อเพิ่มมากกว่าหนึ่งครั้งในแต่ละครั้ง คำพูดของคุณเป็นความจริงอย่างแน่นอนIEnumerable<T>
แต่ฉันพบว่าตัวเองรู้สึกหงุดหงิดICollections
มากกว่าหนึ่งครั้ง ฉันไม่เห็นด้วยกับคุณแค่ระบาย