LINQ / C#:Where& Foreach在列表/数组中使用索引

时间:2010-06-06 11:46:36

标签: c# linq foreach where

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

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

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

3 个答案:

答案 0 :(得分:7)

你应该使用一个简单的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 })

答案 1 :(得分:2)

是的,没有使用循环的方法。

您只需要.ToList() .Where()条款

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

答案 2 :(得分:1)

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

以下是您案例的示例代码

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

printItem方法

// Wrapper.h
#pragma once
// API for call by C
#ifdef __cplusplus
extern "C" {
#endif
    void* wrap_create();
    void wrap_doit(void* wrapper, char* input, char* output, int maxlen);
#ifdef __cplusplus
}
#endif

// Wrapper.cpp

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <vcclr.h>
#include "Wrapper.h"
using namespace System;

class Wrapper {
public:
    gcroot<Wrappee::Evaluator^> eval;
    Wrapper() {}
};

void* wrap_create() {
    Wrapper* w = new Wrapper();
    w->eval = gcnew Wrappee::Evaluator();
    return w;
}

void wrap_doit(void* wrapper, char* input, char* output, int maxlen) {
    Wrapper* w = (Wrapper*)wrapper;
    String^ s = w->eval->Doit(gcnew String(input));
    pin_ptr<const wchar_t> wch = PtrToStringChars(s);
    wcstombs(output, wch, maxlen);
}

// Wrappee.cs
using System;
namespace Wrappee {
  public class Evaluator {
    string _s;
    public static Evaluator Create() {
      return new Evaluator {
        _s = "wrapped evaluator"
      };
    }

    public string Doit(string s) {
      return _s + ":" + s;
    }
  }
}

输出:

  

索引= 0,名称为约翰

     

索引= 1,名字是约翰

     

索引= 2,名称为bob

     

索引= 3,名字是西蒙