状态列表:Foreach循环
本文关键字:循环 Foreach 列表 状态 | 更新日期: 2023-09-27 18:21:48
我修改了一些生成随机状态值的代码(如下)
public static string GenRandomState()
{
List<string> lst = new List<string>();
randomState = string.Empty;
lst.Add("Alabama");
lst.Add("Alaska");
lst.Add("Arizona");
...
randomState = lst.OrderBy(xx => rnd.Next()).First();
return randomState;
} // End GenRandomState
我想删除随机化,而是让该方法每次调用该方法时以相同的顺序(从上到下)调用状态。
所以,我希望看到的是:每次迭代,都会检索到一个状态值(从顶部开始)。将继续执行,直到调用完所有状态值为止。我认为Foreach循环是合适的,但我不确定如何最好地实现。
因为您要离开循环,每次调用只选择一个状态,所以我不会使用foreach
循环,而是保留一个索引变量,并使用它来选择要使用的索引。
首先,我会将列表的创建转移到函数之外,这样只做一次。
public class StateInfo
{
static StateInfo()
{
lst.Add("Alabama");
lst.Add("Alaska");
lst.Add("Arizona");
...
}
static readonly List<string> _lst = new List<string>();
static readonly object _listLock = new object();
static int _nextIndex = 0;
public static string GetNextState()
{
int i = 0;
lock(_listLock)
{
i = _nextIndex;
_nextIndex = (_nextIndex + 1) % _lst.Count;
}
return _lst[i];
}
}
您可以更改函数以返回IEnumerable
。
static void Main(string[] args)
{
foreach (var s in GetStates())
{
Console.WriteLine(s);
}
}
public static IEnumerable<string> GetStates()
{
var lst = new List<string>();
lst.Add("Alabama");
lst.Add("Alaska");
lst.Add("Arizona");
...
return lst;
}