列舉(enum)的基底型態其實是個物件Enum

a0758a7f56ab8ca69575bc825dee247e.jpg

將字串轉為指定的列舉型態,不分英文大小寫,支援英文或數字,支援帶點結尾或不帶點的英文縮寫

轉換失敗會跳錯(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

arrow
arrow
    文章標籤
    程式設計 C# UnitTest
    全站熱搜
    創作者介紹
    創作者 Yang 的頭像
    Yang

    GNAySolution

    Yang 發表在 痞客邦 留言(0) 人氣()