我的问题最好用一个例子说明.
假设我有枚举:
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功能的一个非常好的结果.
归档时间: |
|
查看次数: |
4988 次 |
最近记录: |