นี่เป็นคำถามเก่า แต่ฉันคิดว่าฉันจะตอบคำถาม C # 6 ฉันมักจะต้องตั้งค่าข้อมูลการทดสอบที่ป้อนได้ง่ายในรหัสเป็นรายการของสิ่งอันดับ ด้วยฟังก์ชั่นการขยายสองสามประการคุณสามารถมีรูปแบบที่กะทัดรัดและสวยงามโดยไม่ต้องซ้ำชื่อในแต่ละรายการ
var people= new List<Tuple<int, int, string>>() {
{1, 11, "Adam"},
{2, 22, "Bill"},
{3, 33, "Carol"}
}.Select(t => new { Id = t.Item1, Age = t.Item2, Name = t.Item3 });
สิ่งนี้ทำให้ IEnumerable - ถ้าคุณต้องการรายการที่คุณสามารถเพิ่มได้จากนั้นเพียงแค่เพิ่ม ToList ()
ความมหัศจรรย์มาจากการขยายกำหนดเองวิธีการเพิ่มสำหรับ tuples ตามที่อธิบายไว้ในhttps://stackoverflow.com/a/27455822/4536527
public static class TupleListExtensions {
public static void Add<T1, T2>(this IList<Tuple<T1, T2>> list,
T1 item1, T2 item2) {
list.Add(Tuple.Create(item1, item2));
}
public static void Add<T1, T2, T3>(this IList<Tuple<T1, T2, T3>> list,
T1 item1, T2 item2, T3 item3) {
list.Add(Tuple.Create(item1, item2, item3));
}
// and so on...
}
สิ่งเดียวที่ฉันไม่ชอบคือประเภทถูกแยกออกจากชื่อ แต่ถ้าคุณไม่ต้องการสร้างคลาสใหม่วิธีการนี้จะยังช่วยให้คุณมีข้อมูลที่อ่านได้
new[] { new{ Id = (int?)null, Name = "Foo" }, new { Id = (int?)1, Name = "Foo" }}