前往
大廳
主題

字串轉列舉

Yang | 2022-06-27 09:07:29 | 巴幣 2 | 人氣 195

列舉(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
送禮物贊助創作者 !
0
留言

創作回應

更多創作