当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《将附加信息与.NETEnum相关联》经验,为你挑选了1个好方法。

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

假设我有枚举:

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

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

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

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



1> Charlie Flow..:

在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功能的一个非常好的结果.

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

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有