using System; namespace TBL.CSharp.Utilities.Random { /// /// 随机数扩展工具类 /// public static class Random { /// /// 生成非负随机数 /// public static int Next(this IRandom random) => Math.Abs(Math.Max(random.NextRaw(), int.MinValue + 1)); /// /// 生成随机数,并将结果取余到范围内 /// /// 随机数发生器 /// 随机最小值(结果包含) /// 随机最大值(结果不包含) /// 生成结果 /// 范围上下界不正确 public static int Next(this IRandom random, int minValue, int maxValue) { if (minValue >= maxValue) throw new ArgumentOutOfRangeException(nameof(minValue), $"{nameof(minValue)}({minValue}) >= {nameof(maxValue)}({maxValue})"); return minValue + random.Next() % (maxValue - minValue); } /// /// 生成 0 ~ 内随机数 /// /// 随机数发生器 /// 随机最大值(结果不包含) /// 生成结果 /// 范围上下界不正确 public static int Next(this IRandom random, int maxValue) => random.Next(0, maxValue); /// /// 进行概率取模检定 /// /// 随机数发生器 /// 随机最小值(结果包含) /// 随机最大值(结果不包含) /// 检定分界线 /// 随机结果对 的取模值 public static int CheckModule(this IRandom random, int minValue, int maxValue, int line) => random.Next(minValue, maxValue) % line; /// /// 以百分比进行概率取模检定 /// /// 随机数发生器 /// 检定分界线 /// 在范围 0 ~ 100 中生成的随机结果对 的取模值 public static int CheckModulePercent(this IRandom random, int line) => random.CheckModule(0, 100, line); /// /// 进行概率检定 /// /// 随机数发生器 /// 随机最小值(结果包含) /// 随机最大值(结果不包含) /// 检定分界线 /// 随机结果是否小于 public static bool Check(this IRandom random, int minValue, int maxValue, int line) => random.Next(minValue, maxValue) < line; /// /// 以百分比进行概率检定 /// /// 随机数发生器 /// 检定分界百分比 /// 在范围 0 ~ 100 中生成的随机结果是否小于 public static bool CheckPercent(this IRandom random, int line) => random.Check(0, 100, line); } }