【问题标题】:LINQ/C#: Where & Foreach using index in a list/arrayLINQ/C#:在列表/数组中使用索引的 Where 和 Foreach
【发布时间】:2011-02-28 08:50:37
【问题描述】:

我有一个列表/数组,需要处理某些元素,但在处理中还需要元素的索引。 示例:

列表名称 = john, mary, john, bob, simon
Names.Where(s => s != "mary").Foreach(MyObject.setInfo(s.index, "blah")

但不能将“索引”属性与列表一起使用,相反,如果名称在数组中,我不能使用 Foreach... 有什么建议吗?

【问题讨论】:

  • 你想要原始集合中的索引还是过滤集中的索引?
  • C# foreach with index 的可能重复项

标签: c# linq foreach where


【解决方案1】:

您应该使用一个简单的for 循环,如下所示:

var someNames = Names.Where(s => s != "mary").ToArray();

for (int i = 0; i < someNames.Length; i++)
    someNames.setInfo(i, "blah");

LINQ 不是基本循环的全部。

如果你真的想使用LINQ,你需要致电Select:

Names.Where(s => s != "mary").Select((s, i) => new { Index = i, Name = s })

【讨论】:

  • 如果你要推荐一个for循环,那么我建议你把条件也放在for循环中,而不是先使用Linq,然后循环遍历数组。
【解决方案2】:

是的,有一种方法可以不使用循环。

你只需要.ToList()你的.Where()子句

Names.Where(s => s != "mary").ToList().Foreach(MyObject.setInfo(s.index, "blah");

【讨论】:

    【解决方案3】:

    Foreach 对集合中的每个元素执行。 参考:https://msdn.microsoft.com/en-us/library/bwabdf9z(v=vs.110).aspx

    以下是您的案例的示例代码

    List<string> Names = new List<string> { "john", "mary", "john", "bob", "simon" };
    
    int index = 0;
    
    Names.Where(s => s != "mary").ToList().ForEach(x => printItem(index++,x));
    

    printItem 方法

    public static void printItem(int index, string name){
        Console.WriteLine("Index = {0}, Name is {1}",index,name);
    }
    

    输出:

    索引 = 0,名字是约翰

    索引 = 1,名字是约翰

    索引 = 2,名字是 bob

    索引 = 3,名字是 simon

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多