Enum ToString with user friendly strings

后端 未结 23 2113
伪装坚强ぢ
伪装坚强ぢ 2020-11-22 11:44

My enum consists of the following values:

private enum PublishStatusses{
    NotCompleted,
    Completed,
    Error
};

I want to be able to

23条回答
  •  借酒劲吻你
    2020-11-22 12:20

    I use a generic class to store the enum/description pairs and a nested helper class to get the description.

    The enum:

    enum Status { Success, Fail, Pending }
    

    The generic class:

    Note: Since a generic class cannot be constrained by an enum I am constraining by struct instead and checking for enum in the constructor.

    public class EnumX where T : struct
    {
        public T Code { get; set; }
        public string Description { get; set; }
    
        public EnumX(T code, string desc)
        {
            if (!typeof(T).IsEnum) throw new NotImplementedException();
    
            Code = code;
            Description = desc;
        }
    
        public class Helper
        {
            private List> codes;
    
            public Helper(List> codes)
            {
                this.codes = codes;
            }
    
            public string GetDescription(T code)
            {
                EnumX e = codes.Where(c => c.Code.Equals(code)).FirstOrDefault();
                return e is null ? "Undefined" : e.Description;
            }
        }
    }
    

    Usage:

    EnumX.Helper StatusCodes = new EnumX.Helper(new List>()
            {
                new EnumX(Status.Success,"Operation was successful"),
                new EnumX(Status.Fail,"Operation failed"),
                new EnumX(Status.Pending,"Operation not complete. Please wait...")
            });
    
            Console.WriteLine(StatusCodes.GetDescription(Status.Pending));
    

提交回复
热议问题