我正在使用以下方法从 ID 列表中获取随机值。
private int GetRandomDateBasedSectorId(IEnumerable<int> sectorIds)
{
var randomSortTable = new Dictionary<int, int>();
foreach (int id in sectorIds)
randomSortTable[new Random(DateTime.Now.DayOfYear).Next()] = id;
return randomSortTable.OrderBy(KVP => KVP.Key).Select(KVP => KVP.Value).FirstOrDefault();
}
我使用DateTime.Now.DayOfYear
作为种子的原因是因为我想在一天内每次执行该方法时都选择相同的扇区 ID,而第二天我会选择一个不同的随机扇区。
这在一定程度上有效,但并不完美。例如,昨天早上和前一天晚上它一直在选择单个扇区 ID,然后在昨天的某个时间点开始选择不同的扇区 ID,而今天它仍在使用昨天下午使用的相同扇区 ID。
我认为DateTime.Now.DayOfYear
会在格林威治标准时间午夜(我当前的时区)发生变化,但似乎并非如此。
如果DateTime.Now.DayOfYear
行为与我预期的不同,有人可以告诉我吗?如果是这样,有没有办法让我修改它,以便我可以确保它会在每天午夜从列表中选择一个新的扇区 ID?