2016-02-23 26 views
0

我在想,如果使用lambda表达式可以简化这些代码行,例如使用valueList.ForEach?我是lambda表达式的新成员。代码重构。而不是在列表中使用foreach使用lambda表达式

foreach (var item in OrderList) 
{ 
    item.ReserveDate = DateTime.ParseExact(item.ReserveDate, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture).ToShortDateString(); 
    item.ExpireDate = DateTime.ParseExact(item.ExpireDate, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture).ToShortDateString(); 
} 
+1

远非简化它,我认为试图在这里使用lambdas会让它变得更加复杂。这段代码绝对没问题。 –

+0

结果会比您使用的方法效率低。结果的左边必须是一个新的变量,因为你不能在lambda表达式的两边都有相同的变量。然后,你将不得不采取新的变量,并将其分配回OrderList。 – jdweng

+0

lambda在这里可以改进的一件事是创建一个更干的方法:'Func parse = d => DateTime.ParseExact(d,“yyyyMMdd”,System.Globalization.CultureInfo.InvariantCulture).ToShortDateString( );'(在循环之前创建)并使用lambda分配两个值'item.ReserveDate = parse(item.ReserveDate);' –

回答

0

你可以这样写,但我不知道这是否是实际上比的foreach更易读:

OrderList.ForEach(item => { 
    item.ReserveDate = DateTime.ParseExact(item.ReserveDate, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture).ToShortDateString(); 
    item.ExpireDate = DateTime.ParseExact(item.ExpireDate, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture).ToShortDateString(); 
}); 

除非你能对那些在并行使用工作(但同样,可读性):

Parallel.ForEach(OrderList, item => { 
    item.ReserveDate = DateTime.ParseExact(item.ReserveDate, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture).ToShortDateString(); 
    item.ExpireDate = DateTime.ParseExact(item.ExpireDate, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture).ToShortDateString(); 
}); 
+1

我想这显示了我对OP的意见。 ;) –

+0

@Mthethew建议只为这种问题使用automapper吗? –