将附加信息与.NET Enum相关联

col*_*ium 22 .net c# enums

我的问题最好用一个例子说明.

假设我有枚举:

public enum ArrowDirection
{
    North,
    South,
    East,
    West
}
Run Code Online (Sandbox Code Playgroud)

我想将对应于每个方向的单位向量与该方向相关联.例如,我想要为North返回(0,1),在West上返回(-1,0)等等.我知道在Java中你可以在枚举中声明一个可以提供该功能的方法.

我目前的解决方案是使用一个静态方法 - 在定义枚举的类中 - 返回一个对应于传入的ArrowDirection的向量(该方法使用HashTable来完成查找,但这并不重要).这似乎......不洁净.

问题:
是否存在一种最佳实践解决方案,用于存储与.NET中的枚举相对应的附加信息?

Cha*_*ers 38

在C#3.0中有一种奇妙的新方法.关键是这个美丽的事实:枚举可以有扩展方法!那么,这就是你能做的:

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

public static class ArrowDirectionExtensions
{
     public static UnitVector UnitVector(this ArrowDirection self)
     {
         // Replace this with a dictionary or whatever you want ... you get the idea
         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;
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

现在,你可以这样做:

var unitVector = ArrowDirection.North.UnitVector();
Run Code Online (Sandbox Code Playgroud)

甜!我大约一个月前才发现这个问题,但这是新C#3.0功能的一个非常好的结果.

这是我博客上的另一个例子.