代码之家  ›  专栏  ›  技术社区  ›  Diskdrive

如何检查实体是否是foreach循环的第一个元素

  •  35
  • Diskdrive  · 技术社区  · 14 年前

    说我有一个 foreach

    如何检查当前在循环中的项是否是第一个对象。

    9 回复  |  直到 3 年前
        1
  •  52
  •   Andrew Truckle    3 年前

    有几种方法可以做到这一点。

    1. 使用 for
    2. 设置布尔标志
    3. 使用Linq获取 list.First() foreach 结束 list.Skip(1)
        2
  •  100
  •   Filip Cornelissen Jakob Gade    12 年前

    foreach(var item in items)
    {
        if (items.First()==item)
            item.firstStuff();
    
        else if (items.Last() == item)
            item.lastStuff();
    
        item.otherStuff();
    }
    
        3
  •  30
  •   geofftnz    14 年前

    像这样:

    bool first = true;
    
    foreach(var item in items)
    {
        if (first)
        {
            item.firstStuff();
            first = false;
        }
        item.otherStuff();
    }
    
        4
  •  17
  •   Ani    14 年前

    下面是一个性能解决方案:

    using (var erator = enumerable.GetEnumerator())
    {
        if (erator.MoveNext())
        {
            DoActionOnFirst(erator.Current);
    
            while (erator.MoveNext())
                DoActionOnOther(erator.Current);
        }
    }
    

    编辑:这里有一个LINQ:

    if (enumerable.Any())
        {
            DoActionOnFirst(enumerable.First());
    
            foreach (var item in enumerable.Skip(1))
                DoActionOnOther(item);
        }
    

    Func<TItem, TResult> ,您可以执行以下操作:

    enumerable.Select((item, index) => index == 0 ? GetResultFromFirstItem(item) : GetResultFromOtherItem(item));
    
        5
  •  4
  •   Corey Ogburn    12 年前

    这更像是一个通用的解决方案,用于获取数组中每个对象的索引。如果是第一次,应该可以测试。

            List<String> entries = new List<string>();
            entries.Add("zero");
            entries.Add("one");
            entries.Add("two");
    
            Dictionary<int, String> numberedEntries = new Dictionary<int, string>();
            int i = 0;
            entries.ForEach(x => numberedEntries.Add(i++, x));
            foreach (KeyValuePair<int, String> pair in numberedEntries) {
                Console.WriteLine(pair.Key + ": " + pair.Value);
            }
    

    在这个设置中,KeyValuePair的键是索引,值是该索引处的对象,在我的示例中是字符串,但是任何对象都可以放在那里。它增加了一点开销,但在需要时可以用来确定列表索引中的任何对象。

        6
  •  4
  •   Arif Furkan Deniz    6 年前

    我认为这是最简单的方法

    foreach (var item in list)
    {
        if((list.IndexOf(item) == 0)
        {
            // first
        }
        // others
    }
    
        7
  •  3
  •   Hamza    14 年前
    bool first = true;
    foreach(var foo in bar)
    {
      if (first)
      {
        // do something to your first item
        first = false;
      }
      // do something else to the rest
    }
    
        8
  •  2
  •   Anton Gogolev    14 年前

    什么都想不出来

    var processedFirst = false;
    foreach(var x in items) {
        if(!processedFirst) {
            ProcessFirst(x);
            processedFirst = true;
        }
    
        9
  •  2
  •   Azhar    14 年前

    试试这个

    bool IsFirst = true;
    
    foreach(DataRow dr in dt.Rows)
    {
        if (IsFirst)
        {
            // do some thing
            IsFirst = false;
        }    
    }