Tag C#

[C#] มาดูกันว่า User Remote เข้ามาเปิดใช้ Application จากเครื่องไหน

C# Logo

ก่อนอื่นมาดูปัญหากันก่อนครับ ว่าทำไมถึงต้องไปไล่ดูว่า มีการ Remote จากเครื่อง User เพื่อมาใช้งาน Application ที่ติดตั้งบนเครื่อง Server หรือป่าว ? เพราะ IT ของลูกค้า อยากรู้ว่ามีใครใช้งานในระบบบ้าง แล้วใช้งานที่เครื่องไหน แต่บังเอิญว่ารอบนี้ ตัว Application ที่พัฒนาถูกไปติดตั้งบรเครื่อง Windows Server พอ User Remote เข้ามาใช้งาน ปรากฏว่าระบบลง Log และ Active User มาจากเครื่อง Serer ที่เป็น Windows Server ทั้งหมดเลยครับ โดยคำสั่ง C# ที่ใช้ดึงว่าเครื่องที่…

[C#] ตั้งชื่อเล่นของ Class (Alias) ให้เรียกใช้งานได้ง่าย

Reference: https://pixabay.com/en/colored-pencils-colour-pencils-star-374771/

เวลาเราพัฒนาระบบที่มันซับซ้อนๆมากๆ ปัญหาที่ปวดหัวที่สุดเลย คือ การตั้งชื่อ บางทีชื่อตัวแปรยาวๆ ถ้าย่อไป อาจจะงงได้ Dev เลยใช้ชื่อเต็มไป พอลองเอาตัวแปรเหล่านี้มาใช้ มันดูเกะกะรกตามากครับ กว่าจะรู้ว่า ตั้งชื่อเล่นของ Class (Alias) ให้เรียกใช้งานได้ง่ายกันดีกว่า โดย C# มันมีวิธีในการการตั้งชื่อเล่น(Alias) กันนะ มาดู Code เดิมกันดีกว่า ถ้าสังเกตุใน Code พบว่า RebalanceProcessExtensions.Col_OriginalNAV ชื่อ Class RebalanceProcessExtensions มันยาวมากๆ ครับ ถ้าทำไปนานๆ Code ตรึมครับ ดูยาก ที่นี้มาลองใช้ตัวช่วยกันดีกว่า ลองใช้ Class Alias โดยการย่อชื่อ…

[C#] How to Get property name from object

งานของผมใช้ Dapper แล้วปัญหามันมีอยู่ว่าตอนสร้าง predicate(เงื่อนไข) มันต้องเอาชื่อ Property ไป Where ทำให้มันมีความเสี่ยงมาก ถ้าแก้ชื่อ Property แล้ว Refactor ไม่ครบครับ ผมเลยทำ Helper มาเพื่อช่วยให้มันไป Get ชื่อ Property จากตัว Object ซะเลยครับ ได้มาเป็น Update 2019-05-23 จากแบบที่สอง เราสามารถใช้ nameof ได้เลยครับ ตัวอย่าง ตามนี้เลย แถม Code สั้นกระชับด้วย สำหรับถ้าใครอยากอ่าน Step การ Research ของผม…

[C#] ลองใช้ Log4Net มาเก็บบันทึกของ Console App กัน

หลังจากสร้าง draft ทิ้งไว้นานมาแล้ว วันนี้มาลองรื้อบทความเก่าๆมาเขียนให้เสร็จครับ สำหรับ Blog ตอนนีเป็นการลองใช้ Log4Net กับ console app ครับ เอาหละมาลุยกันเลยครับ เตรียมตัว & ติดตั้ง สร้าง new project แบบ console app ติดตั้ง Apache log4net จากตัว nuget คลิกขวาที่ Project >> Manage Nuget Package >> Search “Nuget” >> Install ครับ สร้าง Configuration…

[C#] มาใช้ HtmlAgilityPack ดึงข้อมูลจากเว็บ

ตอนที่ผมเขียน Blog น่าจะเป็นช่วงปลายปี 2016 นะครับ พอดีวันนี้เหลือเวลาอีก 2-3 ชั่วโมงจะเลิกงาน ผมเลยลองทำ Project ง่ายๆ ดูครับ โดยดึงข้อมูลจากเว็บ เกี่ยวกับข้อมูลพื้นฐานของหุ้นนะครับ ก่อนที่จะทำ สิ่งที่ตต้องทำลอง Research Library ดูก่อนครับ ว่ามีอะไรช่วยได้ไหม เท่าที่ดูมี Library ที่เหมาะสม ดังนี้ครับ HtmlAgilityPack สามารถ Download มาจาก Nuget ได้เลยครับ ถึงเวลาเริ่มทำ ต้องไปส่องเว็บก่อน ว่าเราดึงข้อมูลอะไร ลองดู Code ของ HTML ที่ได้ ลอง View…

[C#] Guidelines for Exception Handling

หลังจากเขียน Code ในการทำงานมาหลายปี พอดีเจอบทความนึงที่น่าสนใจ ผมเลยทำความเข้าใจ และสรุป เกี่ยวกับ Exception ดังนี้ครับ Exception คือ อะไร ? Exception คือ การแจ้งข้อมูลข้อผิดพลาดที่เกิดขึ้น จากการทำงานของระบบครับ มันมีกลุ่มที่เราสามารถจัดการเองได้ ใช้ Try Catch เข้าช่วย หรือจัดการไม่ได้เลยพวกกลุ่ม Error Guidelines for Exception Handling – Catch only the exceptions that you can handle. เวลาเขียน Code ใน…

[.Net] มาทำให้ Parallel.ForEach Debug ง่ายกันเถอะ

หลังจากหายไปพักนึง หลังากลองตบตีกพวก Thread มาสักพักใหญ่แล้ว วันนี้ขอประเดิม Blog เลยและกันครับ สำหรับตัว Microsoft .Net Framework ถ้าใครใ้ตั้งแต่ 4.0 เป็นต้นไป มันมีชุดคำสั่งสำหรับทำงานแบบ Parallel ด้วยครับ ซึ่งหนึ่งในนั้น คือ Parallel.ForEach นั้นเองครับ แล้ว Parallel.ForEach คือ อะไร มันเหมือน ForEach แหละ แต่ต่างกันที่ ForEach ทำคนเดียว แต่ Parallel.ForEach ช่วยกันทำครับ มันก็ดีช่วงกันทำนี่ แล้วมันมีปัญหาอะไร ก็ตอนมี Bug ไงครับ ยิ่งเป็น Runtime Exception แล้ว จับได้ยากครับ เพราะ Parallel.ForEach…

[.NET] ประกาศให้โลกรู้ว่า Method นี้ Class นั้น ตกยุคแล้ว !!!

จาก Code เล็กๆ เมื่อวันเวลาผ่านไป มันก็เติบโตขึ้น ผ่านการตัดต่อพันธุกรรมมาอย่างโชกโชน พร้อมกับภาระหน้าที่อันยิ่งใหญ่ แต่บาง Class บาง Method มันไม่ตอบโจทย์ทางธุรกิจแล้ว มันควรจะถูกกำจัดไปซะ แต่ Code มันบางส่วนมันใช้อยู่ เราจะทำอย่างไร เพื่อให้ทีม Develop ที่พัฒนาด้วยกัน เปลี่ยนไปเรียกใช้ Class หรือ Method ใหม่แทน !!! ทางแรก เราอาจจะประกาสแจ้งให้ในทีมทราบ แต่บางครั้งอาจจะมีหลงลืมบ้าง เพื่อป้องกันปัญหาระยะยาวทำแบบ Java ดีกว่า ตัว Java มันมีบอกว่า Code ส่วนไหนที่เลิกใช้ (deprecated) ไปแล้วครับ โดยในตัว .Net…

String .Equals() vs ==

two pigeon perched on white track light + equal

พอดีเมื่อวันพฤหัสก่อน เห็นน้องที่ทำงานใช้ Operator == ในการตรวจสอบว่า String เป็นอันเดียวกันไหม แต่ผมเห็นแล้วรู้สึกแปลกๆ มันควรใช้ Method Equals() มากกว่าครับ ใน Blog ตอนนี้ผมแสดงความแตกต่างของ .Equals() กับ == โดยผมยกตัวอย่างเฉพาะในภาษา Java และ C# ที่ผมใช้งานหลักอยู่ครับ – JAVA – C# จาก Code ทั้ง 2 แบบ เราจะเห็นความแตกต่างกันของ String นะครับ (ตามตัวอย่างของ C# และ Java นะครับ)…

[C#] Shallow Copy กับ Deep Copy

จากบทความตอนที่แล้ว ความแตกต่างระหว่าง Shallow copy กับ Deep copy คราวนี้เรามาลองดูการใช้งานจริงในภาษา C# บ้างนะครับ สำหรับวิธีการ Copy Object ใน C# มีวิธีที่สามารถทำได้ทั้งหมด ดังนี้ Implement Interface ICloneable MemberwiseClone Reflection Serialization สำหรับวิธีการนี้ ถ้าเป็น .NET Core 5 ไม่สามารถใช้งานได้แล้วนะครับ และถูกเอาออกถาวรใน .NET9Ref: Deserialization risks in use of BinaryFormatter and related types – .NET…