我试图存储和检索枚举中的其他信息。我最终有两种方法。
第一种方法是使用自定义属性。
https://stackoverflow.com/a/22054994/5078531
https://stackoverflow.com/a/35040378/5078531

public class DayAttribute : Attribute
{
    public string Name { get; private set; }

    public DayAttribute(string name)
    {
        this.Name = name;
    }
}

enum Days
{
    [Day("Saturday")]
    Sat,
    [Day("Sunday")]
    Sun
}

public static TAttribute GetAttribute<TAttribute>(this Enum value)
        where TAttribute : Attribute
    {
        var enumType = value.GetType();
        var name = Enum.GetName(enumType, value);
        return enumType.GetField(name).GetCustomAttributes(false).OfType<TAttribute>().SingleOrDefault();
    }


通过在枚举上编写扩展方法,我在这里找到了第二种方法。
https://stackoverflow.com/a/680515/5078531

public enum ArrowDirection
{
    North,
    South,
    East,
    West
}

public static class ArrowDirectionExtensions
{
     public static UnitVector UnitVector(this ArrowDirection self)
     {
         switch(self)
         {
             case ArrowDirection.North:
                 return new UnitVector(0, 1);
             case ArrowDirection.South:
                 return new UnitVector(0, -1);
             case ArrowDirection.East:
                 return new UnitVector(1, 0);
             case ArrowDirection.West:
                 return new UnitVector(-1, 0);
             default:
                 return null;
         }
     }
}


如果要寻找性能我应该选择哪种方法?还是缺少其他有效的方法?

最佳答案

两者都是实现它的有效方法。和许多其他方式一样。就个人而言,我喜欢第一个的便利。可以通过仅处理属性一次并存储(大概在static字段中)来减轻反射的性能损失-如果枚举值是连续的且基于0,则可能作为平面数组存储;否则,也许在字典中。

08-26 22:47
查看更多