LINQ/From-Select vs ForEach

本文关键字:ForEach vs From-Select LINQ | 更新日期: 2023-09-27 18:12:32

我在这里和其他地方做了一些搜索,但无法准确找到我要问的。这段代码来自我正在研究的一些示例代码。

 public CountryViewModel(Region[] regions)
    {
        _regions = new ReadOnlyCollection<RegionViewModel>(
            (from region in regions
             select new RegionViewModel(region))
            .ToList());
    }

我相信以上内容相当于:

  public CountryViewModel(Region[] regions)
    {
        _regions = new ReadOnlyCollection<RegionViewModel>();
        foreach (region in regions)
        {  
            _regions.Add(new RegionViewModel(region)); 
        }
    }

我的理解正确吗?

LINQ/From-Select vs ForEach

不,代码段是不相等的。由于多种不同的原因,第二个代码片段无法编译。您没有定义region, ReadOnlyCollection<T>没有无参数构造函数,ReadOnlyCollection<T>没有Add方法。由于第一个代码片段编译并成功创建了ReadOnlyCollection<RegionViewModel>,因此它不会做同样的事情。

是。这两个代码段实现了相同的目标(除了语法上的小问题),在概念上它们将具有相同的最终结果。

然而,可能存在性能差异,我无法评论。我不太了解c#的内部工作原理,但我怀疑LINQ语句会产生更好的性能。不过,我可能完全错了。

编辑:

我上面的语句假设了一个正常的Collection,而不是ReadOnlyCollection,因为我错过了这个细节。我收回我的声明。第一个代码示例是唯一可以在这里工作的,因为该结构是ReadOnly。