处理列表,同时将其附加到C#中?

4 .net c#

是否有某种类似列表的集合,我可以在.NET中使用它来允许我在迭代时附加到它?

var ls = new List<int>();
ls.Add(5);

foreach (var v in ls) {
    if (v > 0)
        ls.Add(v - 1);
}

//Alternative
var e = ls.GetEnumerator();
while (e.MoveNext()) {
    if (e.Current > 0)
        ls.Add(e.Current - 1);
}
Run Code Online (Sandbox Code Playgroud)

Dmi*_*nko 6

为了模仿这样的foreach循环,我建议使用for循环,同时向后迭代:

for (int i = ls.Count - 1; i >= 0; --i) {
  var v = ls[i];

  //TODO: put relevant code from existing foreach loop here  
} 
Run Code Online (Sandbox Code Playgroud)

或者如果你必须循环前进

int n = ls.Count; // we don't want iterate the items appended

for (int i = 0; i < n; ++i) {
  var v = ls[i];

  //TODO: put relevant code from existing foreach loop here  
}
Run Code Online (Sandbox Code Playgroud)

如果你想要itetate附加项(见下面的评论)标准for循环就足够了:

for (int i = 0; i < ls.count; ++i) {
  var v = ls[i];

  //TODO: put relevant code from existing foreach loop here  
} 
Run Code Online (Sandbox Code Playgroud)

最后,您可以迭代原始列表的副本:

foreach (var v in ls.ToList()) { // ls.ToList() is a shallow copy of the ls
  ...
}  
Run Code Online (Sandbox Code Playgroud)