如何在while循环条件下使用lambda表达式?

时间:2015-02-03 15:17:43

标签: c# lambda

while(list.next() != null && list.next().asInteger() != 6)
{
 ...
}

这里是否可以使用内联lambda函数来避免两次调用list.next()?如果next()实际上从列表中删除了元素,那么这不仅仅是方便的。

5 个答案:

答案 0 :(得分:4)

YourType foo;
while ((foo = list.next()) != null && foo.asInteger() != 6)
{
}

答案 1 :(得分:1)

在:

时,您可以使用代替而不是
for (var item = list.next(); item != null && item.asInteger() !=6; item = list.next()) {
  ...
}

答案 2 :(得分:0)

您可以在while循环中分配变量。写它会更容易。

WhateverNextReturns nextListItem;
while ((nextListItem = list.next()) != null) && nextListItem.asInteger() != 6)
// Do some stuff

或者更好......

WhateverNextReturns nextListItem;
while(true)
{
  nextListItem = list.next();
  if (nextListItem == null || nextListItem == 6)
    break;
  //Do some stuff
}

我认为使用lambda会使它变得比它更复杂。

这是在StackOverflow Answer中有人在while表达式中分配变量的另一个例子

答案 3 :(得分:0)

可以使用内联lambda执行此操作,但C#不喜欢它

while (((Func<YourType, bool>)(n => n != null && n.asInteger() != 6))(list.next()))
{
    ...                
}

答案 4 :(得分:-3)

这个列表是IEnumerable对象吗?你可以随时使用

list.Where(t!=null && t=>t.asInteger()==6).ToList().ForEach(t=>{
//do anything you want with t here.
});

告诉我,如果我的问题出错了。