gpt4 book ai didi

c# - 如何阻止枚举越界?

转载 作者:太空宇宙 更新时间:2023-11-03 17:54:02 26 4
gpt4 key购买 nike

我仍在学习 C# 编程的技巧。我正在尝试编写一个应用程序来解决 Knight's Tour但是在尝试为骑士争取 future 可能的位置时遇到了一些悲伤。

对于职位,我使用了一个非常简单的结构:

public struct Position
{
public enum BoardRank { A = 1, B, C, D, E, F, G, H };
public BoardRank X;
public int Y;
}

在骑士类中,我的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);
}
...

对于 position = A1 和 times = -1,您可以看到 Behaviour.X 如何快速超出范围,但我假设这会被 try block 拾取。

我尝试添加一个 {get; set;} 在枚举声明上,但在 VS2010 中引发了一些无用的语法错误。

还有什么我可以在这里尝试阻止我的枚举越界吗?

最佳答案

I assumed this would have been picked up by the try block.

没有。 C# 中的枚举实际上是“命名数字”。它们不是该类型的一组完整值。

Is there anything else I can try here to stop my enum from going out of bounds?

您可以使用 Enum.IsDefined检查原始枚举中是否存在值。我个人会停止使用公共(public)字段,而是让 Position 不可变——然后在构造函数中验证值。您还可以使用诸如 WithX 之类的方法,它根据当前值返回一个新值,仅更改 X 。虽然您拥有公共(public)字段,但您永远无法相信任何特定值都是有效的。

关于c# - 如何阻止枚举越界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16606070/

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