gpt4 book ai didi

c# - 将附加信息与 .NET 枚举相关联

转载 作者:IT王子 更新时间:2023-10-29 04:33:33 25 4
gpt4 key购买 nike

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

假设我有枚举:

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

Here's another example on my blog.

关于c# - 将附加信息与 .NET 枚举相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/680486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com