فرض کنید یک Enum با نام AnimalEnum ساختهایم که شامل مقادیر Cat, Dog, Mouse میباشد. حالا اگر بخواهیم یک رشتهای که احتمالا یکی از مقادیر Cat, Dog, Mouse در آن میباشد را به نوع AnimalEnum متناظرش تبدیل کنیم، چه کاری باید انجام داد؟! طبیعتا شاید بگویید شرط مینویسیم که مقادیر را بررسی کند! اما این کار خستهکننده است! در ادامه روش سادهی انجام این کار را خواهیم گفت.
روش اول
متد زیر با دریافت مقدار رشتهای، آن را به Enum مورد نظر تبدیل میکند:
1 2 3 4 |
public static T ParseEnum<T>(string value) { return (T) Enum.Parse(typeof(T), value, true); } |
مثلا به صورت زیر برای AnimalEnum:
1 |
AnimalEnum myAnimal = ParseEnum<AnimalEnum>("Cat"); |
فرض کنید به جای Cat، رشتهای با مقدار Wolf قرار بگیرد! اما متاسفانه این مقدار در AnimalEnum وجود ندارد. در روش دوم این مشکل حل شده است.
روش دوم
این روش، شکل پیشرفتهی متد قبل میباشد که در آن، یک مقدار پیشفرضی برای Enum در نظر گرفته شده است:
1 2 3 4 5 6 7 8 9 10 |
public static T ToEnum<T>(this string value, T defaultValue) { if (string.IsNullOrEmpty(value)) { return defaultValue; } T result; return Enum.TryParse<T>(value, true, out result) ? result : defaultValue; } |
از آنجایی که پارامتر اول از this برای تعریف استفاده کرده است، میتوان به صورت زیر از این تابع استفاده کرد:
1 |
AnimalEnum myAnimal = "Wolf".ToEnum(AnimalEnum.Unknown); |
البته فرض بر این بود که Unknown یک مقدار جدید در AnimalEnum باشد که به حیوان ناشناخته دلالت کند. اما میتوان پیشفرض را برای مثال روی Cat و … نیز قرار داد که به منطق هدف ما بستگی دارد.
نظرات ثبت شده بدون دیدگاه