[C#] ถ้า GroupBy แล้วห้ามใช้ตัวแปรชนิด var มารับหละ ?

หลายองค์กรมีตัว Coding Standard เพื่อเป็นแนวทางในการเขียน Code ให้มีระเบียบ ไปในทีศทางเดียวกันครับ ใครๆก็สามารถมาอ่าน Code นั้นได้ครับ แล้วที่นี้ ถ้ามีการประกาศว่า ถ้ามี List<Object> แล้ว GroupBy ห้ามใช้ตัวแปรขนิด var มารับ จะทำอย่างไรหละ ?

อ้าว Copy Pattern จาก Stack Overflow มา

ทำอย่างไรดี !!!

ทุกปัญหามีทางแก้ไขได้ครับ จากโจทย์ ถ้ามี 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 to your email.