如果我们在foreach循环中使用lambda表达式会有任何性能或质量问题吗?

时间:2013-05-16 13:19:58

标签: performance linq coding-style lambda

我有一段代码如下 -

    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声明的一部分。

请建议。

1 个答案:

答案 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)
        {
        ...