gpt4 book ai didi

c# - LINQ+Lambda vs. standard-indexers+foreach - 甚至 MS 和 Lippert 都说,索引器更好。在这种情况下?

转载 作者:行者123 更新时间:2023-11-30 23:23:42 25 4
gpt4 key购买 nike

<分区>

我正在研究 4 个监视器类/方法(如 async/await、Task、BackgroundWorker 和 Thread)之间的主要区别,因此我创建了一些控件,它们只与这 4 个方法/对象交互。我还想同时深入研究 LINQ/LAMBDA,并设法编写了一些成功的 LINQ 语句,例如这个语句。

                 (from t in tabControlOutput.TabPages.Cast<TabPage>()
from c in t.Controls.OfType<WebBrowser>()
select c).ToList().ForEach(c => c.Navigate(Constants.BlankUrl));

当然,在发布这个问题之前我一直在寻找,我发现了一些像这样的不错的信息

First Link

重定向到 Eric Lippert 的评论。

foreach vs ForEach

除了我知道 LINQ 向标准操作提供了一些开销,这可以通过标准指令而不是 linq 发出,开销问题似乎是 MS 的特殊原因,为什么坚持使用标准的 LINQ-less 处理,但 E.Lippert 有一些其他论点,尤其是关于 ForEach 的论点。

有一些陈述,似乎让我感到困惑:

.... The purpose of an expression is to compute a value, not to cause a side effect. The purpose of a statement is to cause a side effect.

我从未在任何编程书籍、最佳实践或其他任何书籍中听说过/读过相关内容。根据常见(和我)的经验,副作用一词通常带有任意的负面味道,而不是自愿实现的目标。

谁能澄清 E.Lippert 的这句话?

此外,E.Lippert 指出,有些两条线似乎更难维护,我不会接受(好吧,这可能是基于意见)。

但是,关于我的这段代码,我可以看到唯一“丑陋”的东西是“Cast”。

那么,是否有合理的理由(不是基于意见,而是纯粹的技术术语、论据、限制性陈述、原则(可读性也属于它们),为什么我的行应该或不应该被传统的foreach替换,或者甚至反射(reflection)?

编辑:我更改了我的代码,删除了我以前的行,发表了评论并添加了这些行。请随时对它们发表评论:

// ---> NOT RECOMMENDED APPROACH: Because LINQ is more designed to query, but at the end
// There is a modification of the queried objects, which
// Is not real LINQ, but a mix.
// And it violates the principles of least astonishment/surprise

// Changed to
var qresult = (from t in tabControlOutput.TabPages.Cast<TabPage>()
from c in t.Controls.OfType<WebBrowser>()
select c);
foreach (var tmp in qresult)
{
tmp.Navigate(Constants.BlankUrl);
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com