C#我可以使用枚举作为for循环来代替int

时间:2018-06-04 13:55:42

标签: c#

所以,我有这个好主意。我需要在平头十六进制中循环所有方向。所以,鉴于枚举

public enum HexDirectionFlat
{
    UP, UP_LEFT, DOWN_LEFT, DOWN, DOWN_RIGHT, UP_RIGHT
}

那么这是一个有效的for循环吗?

for(HexDirectionFlat dir = HexDirectionFlat.UP; dir <= HexDirectionFlat.UP_RIGHT; dir++)

如果是这样,是否有任何表现原因不使用它?

1 个答案:

答案 0 :(得分:4)

  

那么这是一个有效的for循环吗?

是的,绝对。

  

如果是这样,是否有任何性能原因不使用它?

不,这是迭代枚举值的一种非常有效的方法 - 例如,可能比调用需要分配数组的Enum.GetValues更有效。

缺点是:

  • 你需要知道&#34;最低&#34;你的枚举值(所以添加一个新的较低值会涉及改变这样的每个循环)
  • 你需要知道&#34;最高&#34;你的枚举值(所以添加一个新的较低值会涉及改变这样的每个循环)
  • 如果你的枚举有差距&#34; (例如,值0,1,3,4,5 - 但没有2)你的循环不会跳过这些空白
  • 如果您的枚举直到基础类型的最高值(例如基于byte的枚举为255),则循环将永远不会终止

你可以使用常数来减轻前两点;第三点只与明确价值的枚举有关;最后一点非常罕见。您可以编写单元测试来检查所有这些。