หลายองค์กรมีตัว Coding Standard เพื่อเป็นแนวทางในการเขียน Code ให้มีระเบียบ ไปในทีศทางเดียวกันครับ ใครๆก็สามารถมาอ่าน Code นั้นได้ครับ แล้วที่นี้ ถ้ามีการประกาศว่า ถ้ามี List<Object> แล้ว GroupBy ห้ามใช้ตัวแปรขนิด var มารับ จะทำอย่างไรหละ ?
ทุกปัญหามีทางแก้ไขได้ครับ จากโจทย์ ถ้ามี List<Object> แล้ว GroupBy ห้ามใช้ตัวแปรขนิด var มารับ ลองมาดูตัวอย่าง Code กันก่อนครับ
- ของเดิม : ใช้ตัวแปรขนิด var มารับผลลัพธ์ที่ได้จาก Group By ครับ
var bondTxGroupBySec = bondTxByPortList.GroupBy(x => x.SecurityId); foreach (var bondTxBySec in bondTxGroupBySec) { IList<FIBondARAPTxDSDTO> bondTxBySecList = bondTxBySec.Select(a =>a).ToList(); //มี Select(a =>a) ซ้อนเสียเวลา Loop 1 รอบ //... }
- ของใหม่ : เราต้องรู้ Type ของ Group By ก่อนครับ ว่าผลลัพธ์ที่ได้เป็นมีชนิดเป็น IGrouping<TKey, TValue> และ มี IEnumerable ซ้อนอีกชั้นครับ สรุปแล้วคำสั่ง Group By ตัว Return Type ที่ได้ IEnumerable<IGrouping<TKey, TValue>> ครับ โดยที่
- TKey คือ ชนิดข้อมูลของ property ที่ใช้ Group By ครับ
- TValue คือ ชนิดข้อมูลของ List ที่ถูก GroupBy ครับ
จากตัวอย่างในส่วนของเดิม สามารถแปลง Code จากตัวแปรชนิด var ได้ ดังนี้ครับ
IEnumerable<IGrouping<int, FIBondARAPTxDSDTO>> bondTxGroupBySec = bondTxByPortList.GroupBy(x => x.SecurityId); foreach (IGrouping<int, FIBondARAPTxDSDTO> bondTxBySec in bondTxGroupBySec) { IList<FIBondARAPTxDSDTO> bondTxBySecList = bondTxBySec.ToList(); //... }
ความเห็นส่วนตัว
- หลังจากเปลี่ยนจากตัวแปร var มาเป็นชนิดข้อมูลที่ชัดเจนมาขึ้น ตัว Code ก็ดูยาวขึ้นด้วยครับ อาจจะทำให้ดูและลายตาได้ครับ แต่มีข้อดีสำหรับมือใหม่ จะดีตีความว่ากำลังทำอะไรได้ชัดเจนครับ
- สุดท้ายแล้ว ทั้งการใช้ var หรือ กำหนดชนิดข้อมูลที่ชัดเจน ไม่มีอะไรที่ถูกและผิดนะครับขึ้นกับการตกลง ภายในทีม หรือองค์กรครับ ต้องการใช้แบบไหนครับ
- ปิดท้าย จากตัวอย่างผมได้ยกตัวอย่าง กรณีที่ GroupBy โดยใช้ 1 property เท่านั้นครับ ถ้ามีหลาย Property หละครับ ? >> มาที่ Blog นี้ได้เลยครับ [C#] ถ้า GroupBy โดยใช้หลาย Property แล้วห้ามใช้ตัวแปรชนิด var หละ
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.