我已经调整了一些生成随机状态值的代码(下面)
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循环是合适的,但我不确定如何最好地实现。
答案 0 :(得分:2)
因为你要离开循环并且每次调用只选择一个状态我不会使用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];
}
}
答案 1 :(得分:1)
您可以更改功能以返回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;
}