使用lambda表达式更改列表中的值

时间:2015-05-26 15:44:22

标签: c# lambda

我有一个变量定义为:

List<List<A>> mylist;

,其中

public class A
{
    int b;
    int c;
}

我想知道是否有一个lambda表达式可以执行以下操作:

for(int i = 0; i < mylist.Count; ++i)
{
    for(int j = 0; j < mylist[i].Count; ++j)
    {
        if(mylist[i][j].b < 10) mylist[i][j].b = 0;
        else mylist[i][j].b = 1;
    }
}

2 个答案:

答案 0 :(得分:4)

您的for循环可以转换为:

List<List<A>> mylist = new List<List<A>>();

foreach (var t1 in mylist.SelectMany(t => t))
{
   t1.b = t1.b < 10 ? 0 : 1;
}

答案 1 :(得分:1)

尽管有一些关于List<T>.ForEach语句可用性的讨论,但这可以执行此任务:

mylist.ForEach(x => x.Foreach(y => y.b = (y.b < 10) ? 0 : 1));

或者在foreach循环中展开它:

foreach(List<A> la in mylist) {
    foreach(A a in la) {
        a.b = (a.b < 10) ? 0 : 1;
    }
}

(condition) ? val_true : val_falseternary operator