列舉(enum)的基底型態其實是個物件Enum
將字串轉為指定的列舉型態,不分英文大小寫,支援英文或數字,支援帶點結尾或不帶點的英文縮寫
轉換失敗會跳錯(ArgumentException)
//source code
public static Enum ConvertTo(this string obj, Type enumType)
{
string trim = obj.Trim(' ', '.').ToLower();
foreach (Enum value in Enum.GetValues(enumType))
{
if (value.ToString().ToLower().StartsWith(trim) || trim == ((int)(object)value).ToString())
{
return value;
}
}
throw new ArgumentException(obj);
}
public static T ConvertTo<T>(this string obj) where T : Enum
{
return (T)ConvertTo(obj, typeof(T));
}
//UnitTest Input
LogTrace($"{ProcessPriorityClass.AboveNormal}|{ProcessPriorityClass.AboveNormal.ToString().ConvertTo<ProcessPriorityClass>()}|{((int)ProcessPriorityClass.AboveNormal).ToString().ConvertTo<ProcessPriorityClass>()}");
LogTrace($"{ProcessPriorityClass.BelowNormal}|{ProcessPriorityClass.BelowNormal.ToString().ConvertTo<ProcessPriorityClass>()}|{((int)ProcessPriorityClass.BelowNormal).ToString().ConvertTo<ProcessPriorityClass>()}");
LogTrace($"{"Sunday".ConvertTo<DayOfWeek>()}");
LogTrace($"{"monday".ConvertTo<DayOfWeek>()}");
LogTrace($"{"Tue".ConvertTo<DayOfWeek>()}");
LogTrace($"{"Wed.".ConvertTo<DayOfWeek>()}");
LogTrace($"{"tHURSDAY".ConvertTo<DayOfWeek>()}");
LogTrace($"{"f".ConvertTo<DayOfWeek>()}");
LogTrace($"{"6".ConvertTo<DayOfWeek>()}");
UnitTest Output:
AboveNormal|AboveNormal|AboveNormal
BelowNormal|BelowNormal|BelowNormal
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday