How can I cast int to enum?

后端 未结 30 1985
礼貌的吻别
礼貌的吻别 2020-11-22 00:56

How can an int be cast to an enum in C#?

30条回答
  •  孤城傲影
    2020-11-22 01:07

    It can help you to convert any input data to user desired enum. Suppose you have an enum like below which by default int. Please add a Default value at first of your enum. Which is used at helpers medthod when there is no match found with input value.

    public enum FriendType  
    {
        Default,
        Audio,
        Video,
        Image
    }
    
    public static class EnumHelper
    {
        public static T ConvertToEnum(dynamic value)
        {
            var result = default(T);
            var tempType = 0;
    
            //see Note below
            if (value != null &&
                int.TryParse(value.ToString(), out  tempType) && 
                Enum.IsDefined(typeof(T), tempType))
            {
                result = (T)Enum.ToObject(typeof(T), tempType); 
            }
            return result;
        }
    }
    

    N.B: Here I try to parse value into int, because enum is by default int If you define enum like this which is byte type.

    public enum MediaType : byte
    {
        Default,
        Audio,
        Video,
        Image
    } 
    

    You need to change parsing at helper method from

    int.TryParse(value.ToString(), out  tempType)
    

    to

    byte.TryParse(value.ToString(), out tempType)

    I check my method for following inputs

    EnumHelper.ConvertToEnum(null);
    EnumHelper.ConvertToEnum("");
    EnumHelper.ConvertToEnum("-1");
    EnumHelper.ConvertToEnum("6");
    EnumHelper.ConvertToEnum("");
    EnumHelper.ConvertToEnum("2");
    EnumHelper.ConvertToEnum(-1);
    EnumHelper.ConvertToEnum(0);
    EnumHelper.ConvertToEnum(1);
    EnumHelper.ConvertToEnum(9);
    

    sorry for my english

提交回复
热议问题