首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Enum扩展方法调用Enum名称?

Enum扩展方法调用Enum名称?
EN

Stack Overflow用户
提问于 2017-12-14 11:15:44
回答 1查看 593关注 0票数 0

我有下面的代码,运行良好。但是我需要使用扩展方法和它的Enum类型。

代码语言:javascript
复制
public class Dropdown
    {
        public Dropdown() { }
        public Dropdown(int id, string name)
        {
            Id = id;
            Name = name;
        }
        public Dropdown(string name)
        {
            Name = name;
        }
        public int Id { get; set; }
        public string StringId { get; set; }
        public string Name { get; set; }
    }

public enum AccidentTypeEnum
{
    [Display(Name = "Minor")]
    Minor = 0,
    [Display(Name = "Major")]
    Major = 1,
    [Display(Name = "Severe")]
    Severe = 2
}

可拓法

代码语言:javascript
复制
public static class EnumExtensions
    {
        public static List<Dropdown> ConvertToDropdown(this Enum mEnum)
        {
            var dropDownlist = new List<Dropdown>();

            var enumType = mEnum.GetType();

            var enumValuies = Enum.GetValues(enumType);
            foreach (var singleValue in enumValuies)
            {
                dropDownlist.Add(new Dropdown { Id = (int)singleValue, Name = singleValue.ToString() });

            }

            return dropDownlist;
       }
    }

问题:

如果我使用下面的行调用扩展方法,上面的代码运行良好

代码语言:javascript
复制
var TestAcident = AccidentTypeEnum.Major;
var resultDropdown = TestAcident.ConvertToDropdown();

但我怎么能像下面这样称呼它呢

代码语言:javascript
复制
 var resultDropdown = AccidentTypeEnum.ConvertToDropdown(); //<-- i need to use like this. but it not working 
EN

回答 1

Stack Overflow用户

发布于 2019-03-07 18:17:26

你能做到的

代码语言:javascript
复制
List<AccidentTypeEnum> types = Utils<AccidentTypeEnum>.ConvertToDropdown();

这条路:

代码语言:javascript
复制
/// <summary>Pseudo extension class for enumerations</summary>
/// <typeparam name="TEnum">Enumeration type</typeparam>
public class Utils<TEnum> where TEnum : struct, IConvertible
{
    public static List<Dropdown> ConvertToDropdown()
    {
        var enumType = typeof(TEnum);

        return enumType.IsEnum
            ? enumType.GetEnumValues()
                .OfType<TEnum>()
                .Select(e => new Dropdown
                {
                    Id = Convert.ToInt32(Enum.Parse(enumType, e.ToString()) as Enum),
                    Name = GetDisplay(e)
                })
                .ToList()
            : throw new ArgumentException($"{enumType.Name} is not enum");
    }

    private static string GetDisplay<T>(T value)
    {
        var enumValueText = value.ToString();

        var displayAttribute = value
            .GetType()
            .GetField(enumValueText)
            .GetCustomAttributes(typeof(DisplayAttribute), false)
            .OfType<DisplayAttribute>()
            .FirstOrDefault();

        return displayAttribute == null ? enumValueText : displayAttribute.Description;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47811995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档