如何阻止enum走出界限?

1 c# enums c#-4.0

我还在学习C#编程的绳索.我正在尝试编写一个解决骑士之旅的应用程序,但在试图获得骑士未来的位置时会遇到一些悲伤.

对于我正在使用非常简单的结构的位置:

public struct Position
{
    public enum BoardRank { A = 1, B, C, D, E, F, G, H }; 
    public BoardRank X;
    public int Y;
}
Run Code Online (Sandbox Code Playgroud)

在骑士类中,我的PossibleMoves()方法开始如下:

public List<Position> PossibleMoves(Position position)
{
    List<Position> positions = new List<Position>();
    int[] multiply = new int[]{1, -1};
    foreach (int times in multiply)
    {
        try{
            Position possible = new Position();
            possible.X = position.X + (Behaviour.X * times);
            possible.Y = position.Y + (Behaviour.Y * times);
            positions.Add(possible);
        }
    ...
Run Code Online (Sandbox Code Playgroud)

对于position = A1和times = -1,你可以看到Behaviour.X如何快速超出范围,但我认为这将被try块拾取.

我尝试{get; set;}在枚举声明中添加一个但是在VS2010中抛出了一些无用的语法错误.

还有什么我可以尝试阻止我的枚举出界吗?

Jon*_*eet 8

我以为这会被try块拾取.

不.C#中的枚举是有效的"命名数字".它们不是该类型的完整值集.

还有什么我可以尝试阻止我的枚举出界吗?

您可以使用Enum.IsDefined检查原始枚举中是否存在值.我个人会停止使用公共字段,而是使用Position不可变 - 然后验证构造函数中的值.您还可以使用诸如WithX根据当前值返回新值的方法,只需X更改即可.虽然你有公共领域,但你永远不会相信任何特定的价值是有效的.