我的问题最好用一个例子说明.
假设我有枚举:
public enum ArrowDirection { North, South, East, West }
我想将对应于每个方向的单位向量与该方向相关联.例如,我想要为North返回(0,1),在West上返回(-1,0)等等.我知道在Java中你可以在枚举中声明一个可以提供该功能的方法.
我目前的解决方案是使用一个静态方法 - 在定义枚举的类中 - 返回一个对应于传入的ArrowDirection的向量(该方法使用HashTable来完成查找,但这并不重要).这似乎......不洁净.
问题:
是否存在一种最佳实践解决方案,用于存储与.NET中的枚举相对应的附加信息?
在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; } } }
现在,你可以这样做:
var unitVector = ArrowDirection.North.UnitVector();
甜!我大约一个月前才发现这个问题,但这是新C#3.0功能的一个非常好的结果.
这是我博客上的另一个例子.