เทคนิค parse enum C# แบบที่ทำให้ง่ายแล้ว

เกริ่นนำ

บทความนี้ไม่ต้องอธิบายอะไรกันมากมายเกี่ยวกับ enumeration ใน C# คุณเคยเจอปัญหาการ parse enum จาก string แต่นอน ในกรณีที่เจอ string ที่ไม่มีใน enum สมมติ เรามี enum นี้อยู่ใน projects

public enum TheFourNobleTruths
{

Suffering, TheOriginOfSuffering, TheExtinctionOfSuffering, ThePath

}

โดยปกติเราก็ parse enum จาก string เขียนแบบนี้

TheFourNobleTruths myState = (TheFourNobleTruths)Enum.Parse(typeof(TheFourNobleTruths), “TheOriginOfSuffering”);

ok ได้อยู่ แต่พอเจอแบบนี้ละ

TheFourNobleTruths myState = (TheFourNobleTruths)Enum.Parse(typeof(TheFourNobleTruths), “VerySuffering”);

ครับ string VerySuffering ไม่มีใน enum TheFourNobleTruths พอ run ก็เกิด exception ครับ

ต่อมาเราก็แก้ไข เพื่อให้รับ string ที่อาจจะเขียนผิดได้ แท่นที่จะเกิด exception เขียนใหม่ได้แบบนี้ครับ

TheFourNobleTruths myState ;
Enum.TryParse<TheFourNobleTruths>(“VerySuffering”, out myState);

อ่า ok ละแบบนี้ไม่เกิด exception ละแม้จะใส่ string ผิดแล้วก็ตาม แต่คุณจะเห็นว่า code แลดูไม่ค่อยสวยเท่าไร เราเลยเขียน extension method ให้กับ string ได้ code ที่ดีกว่าแบบนี้ครับ เพิ่ม class MyExtensions และเขียน extensions method ParseEnum แบบ generic ตามนี้ครับ
public static class MyExtensions
{
public static TEnum ParseEnum<TEnum>(this string value, bool ignoreCase = false) where TEnum : struct
{
TEnum tenumResult;
Enum.TryParse<TEnum>(value, ignoreCase, out tenumResult);
return tenumResult;
}
}

หลังจากนั้นลองกลับไป parse enum โดยใช้ MyExtensions ใหม่ของเราดูครับ

TheFourNobleTruths myState = “TheExtinctionOfSuffering”.ParseEnum<TheFourNobleTruths>();

เป็นไงครับดูดีขึ้นอีกเยอะเลย
ขอบคุณครับ
สำหรับ: C#4.0

Advertisements

#c