c# - 在 C# 中附加列表时处理列表?

标签 c# .net

我可以在 .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);
}

最佳答案

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

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

  //TODO: put relevant code from existing foreach loop here  
} 

或者如果你必须循环向前

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  
}

如果您确实想要迭代附加项(请参阅下面的评论),标准的 for 循环就足够了:

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

  //TODO: put relevant code from existing foreach loop here  
} 

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

foreach (var v in ls.ToList()) { // ls.ToList() is a shallow copy of the ls
  ...
}  

关于c# - 在 C# 中附加列表时处理列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44869871/

相关文章:

c# - 如何使用 Dapper 高效地选择聚合对象?

c# - 可读性与性能比较

.net - 使用 xsd.exe 工具从具有多个命名空间的 XML 文件生成 XSD 文件

c# - 使用 Regex.Replace 保留可以变化的字符

c# - 使用 DateTimeOffset 作为参数问题进行过滤

c# - 写入应用程序事件源是否可以接受?

c# - 如果没有路由匹配,为什么 ASP.NET WebApi 会清除身份?

c# - 检查是否所有复选框都未选中 C# WPF

.net - 为什么我的配置管理器在 Visual Studio 2010 中被禁用?

.net - ASP.NET Webforms 的主要优势是什么?