【问题标题】:Combine foreach with an index [duplicate]将foreach与索引结合起来[重复]
【发布时间】:2012-08-18 18:39:31
【问题描述】:

可能重复:
C# foreach with index

我喜欢在 C# 中使用 foreach 的简单性,但我经常需要一个索引。有什么方法可以将这些优雅地组合成一个简单的结构,而无需执行以下操作:

for(var i = 0; i<items.Count; i++) {
    var item = items[i];

或者

int i = 0;
foreach(var item in items) {
    i++;

我想像这样整洁的东西:

foreach(var item in items;int index) {

【问题讨论】:

  • foreach(var item in items){return items.index}.. 类似这样的
  • 除了samantic candy,还有什么好处? For Loop 用于索引访问,而 ForEach 用于对象访问 - ForEach 不允许在循环期间更改集合,而 for 循环则允许。什么可能是更好的解决方案(如果它是可用的)将是 ForEach 项目上的一个简单变量以返回其索引,但我想这会强制 ForEach 上的索引顺序。
  • 是的,似乎是重复的。我该怎么办?删除问题?

标签: c#


【解决方案1】:

是的,

我在 SO 上找到了一种简洁的扩展方法:

foreach with index

有点像这样(从以前的答案逐字):

public static void Each<T>( this IEnumerable<T> ie, Action<T, int> action )
{
    var i = 0;
    foreach ( var e in ie ) action( e, i++ );
}

并且使用如下:

var strings = new List<string>();
strings.Each(( str, n ) =>
{
    // hooray can capture 'n' as well as 'str'
});

或:

strings.Each((str, n) => Console.WriteLine(str));

【讨论】:

猜你喜欢
  • 2016-05-04
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多