我有一段代码如下 -
var serviceResponseItems = new List<ServiceResponseItems>();
foreach (var item in serviceResponse.SomeItems.Where(x => !string.IsNullOrEmpty(x.Id) && x.Id.Trim().Length > 0).ToList())
{
var responseViewItem = new ResponseViewItem
{
Description = item.ItemDescriptionCode.Trim(),
SummaryActivityDate = item.SummaryActivityDate
};
if (!string.IsNullOrWhiteSpace(item.Amount))
{
responseViewItem.Amount = Convert.ToDouble(item.Amount.Trim());
}
serviceResponseItems.Add(responseViewItem);
}
}
如您所见,foreach循环源是一个lambda表达式。我正试图在整个应用程序中找到提高代码质量的方法。
有人可以建议这种foreach循环在性能/质量/标准方面是否真的更好。
IMO,替代方法可以是声明一个存储lambda表达式结果的变量,并将该变量用作foreach声明的一部分。
请建议。
答案 0 :(得分:1)
就性能而言,在foreach语句中包含表达式不会受到惩罚。 lambda表达式仅在循环开始时计算一次。
就质量而言,在我看来,将表达式置于foreach语句之外更具可读性。这也使得更清楚地重复哪些项目。例如:
var itemsWithValidIds = serviceResponse.SomeItems.Where(x => !string.IsNullOrEmpty(x.Id) &&
x.Id.Trim().Length > 0);
foreach (var item in itemsWithValidIds)
{
...