来自 C# 枚举变量的随机值
Random value from c# enum variable
有没有一种简单的方法可以让我从我的枚举变量中 select 一个随机位值?
例如:
[System.Flags]
public enum Direction{
None = 0,
Up = 1,
Down = 2,
Left = 4,
Right = 8,
All = ~None
}
public Direction someDir = Direction.Up | Direction.Down;
我想要 select 来自 someDir
的随机正位值,这样我只能有 Direction.Up
或 Direction.Down
?
你应该使用数组:
Direction validDirections = new[] { Direction.Up, Direction.Down };
然后:
Random rnd = new Random();
Direction selectedDirection = validDirections[rnd.Next(validDirections.Length)];
(记得重复使用相同的 Random rnd
而不是每次都重新创建它)
如果你真的想要一个单一的 Direction
变量,那么你可以将它拆分为 List<Direction>
:
Direction someDir = Direction.Up | Direction.Down;
var someDir2 = new List<Direction>();
foreach (Direction dir in Enum.GetValues(typeof(Direction)))
{
if (someDir.HasFlag(dir))
{
someDir2.Add(dir);
}
}
Random rnd = new Random();
Direction selectedDirection = someDir2[rnd.Next(someDir2.Count)];
(参见 Most efficient way to parse a flagged enum to a list 和关于使用 HasFlag
的各种评论)
有没有一种简单的方法可以让我从我的枚举变量中 select 一个随机位值?
例如:
[System.Flags]
public enum Direction{
None = 0,
Up = 1,
Down = 2,
Left = 4,
Right = 8,
All = ~None
}
public Direction someDir = Direction.Up | Direction.Down;
我想要 select 来自 someDir
的随机正位值,这样我只能有 Direction.Up
或 Direction.Down
?
你应该使用数组:
Direction validDirections = new[] { Direction.Up, Direction.Down };
然后:
Random rnd = new Random();
Direction selectedDirection = validDirections[rnd.Next(validDirections.Length)];
(记得重复使用相同的 Random rnd
而不是每次都重新创建它)
如果你真的想要一个单一的 Direction
变量,那么你可以将它拆分为 List<Direction>
:
Direction someDir = Direction.Up | Direction.Down;
var someDir2 = new List<Direction>();
foreach (Direction dir in Enum.GetValues(typeof(Direction)))
{
if (someDir.HasFlag(dir))
{
someDir2.Add(dir);
}
}
Random rnd = new Random();
Direction selectedDirection = someDir2[rnd.Next(someDir2.Count)];
(参见 Most efficient way to parse a flagged enum to a list 和关于使用 HasFlag
的各种评论)