多个foreach用于多个列表数据

时间:2014-06-25 07:55:10

标签: c# foreach

我有2个字符串列表。

var justiceCourtName = formCollection["JusticeCourtName"];
var courtId = formCollection["CourtID"];
var justiceCourtNameList = justiceCourtName.Split(',');
var courtIdList = courtId.ToList();

justiceCourtNameList值如下:

"New York"

"Paris"

courtIdList值低于:

"10.33"

"43.15"

我的问题:

我需要使用foreach for justiceCourtNameList和courtIdList,之后,从justiceCourtNameList到Name(下面),从courtIdList到lawCourtId逐一使用。

但我不知道如何将justiceCourtNameList和courtIdList逐一设置为新的LawCourt?

var lawCourt = new LawCourt { JusticeCourtID = lawCourtId, Name = lawCourtName };


ServiceLibraryHelper.LawServiceHelper.UpdateLawCourt(lawCourt); // Update

3 个答案:

答案 0 :(得分:3)

如果我理解你的问题,你想要的是Zip扩展方法:

var results = courtIdList
                  .Zip(justiceCourtNameList,
                       (lawCourtId, lawCourtName) =>
                           new LawCourt
                           {
                               JusticeCourtID = lawCourtId,
                               Name = lawCourtName
                           )};

它并行枚举列表,并将第一个列表中的当前项与第二个列表中的当前项相关联。 lambda表达式根据输入序列中的项对指定输出序列中的返回值。

答案 1 :(得分:1)

可能Enumerable.Zip可以满足您的目的(MSDN link):

int[] numbers = { 1, 2, 3, 4 };
string[] words = { "one", "two", "three" };

var numbersAndWords = numbers.Zip(words, (first, second) => first + " " + second);

foreach (var item in numbersAndWords)
    Console.WriteLine(item);

// This code produces the following output:

// 1 one
// 2 two
// 3 three

答案 2 :(得分:0)

不要使用foreach运算符,而是使用for运算符。之前检查两个数组的长度是否相等。

List<string> justiceCourtNameList = ...
List<double> courtIdList = ...

if(justiceCourtNameList.Count != courtIdList.Count) {
    throw new ArgumentException("justiceCourtNameList and courtIdList must have the same length");
}

for(int i=0; i<justiceCourtNameList.Count; i++) {

    string justiceCourtName = justiceCourtNameList[i];
    double courtId = courtIdList[i];

    // DO HERE WHATEVER YOU WANT HERE
}

无法使用foreach进行双重同步迭代。