gpt4 book ai didi

C# Linq - 来自 SQL 的 SET 语法,即 SET abc(obj 的属性)WHERE xyz = true in IEnumerable

转载 作者:行者123 更新时间:2023-11-30 13:51:46 24 4
gpt4 key购买 nike

我有一个 Obj 的集合,我想遍历这个集合,并在条件为真时设置一个属性,所以在正常情况下它会是:

foreach (var o in obj)
{
if (o.SomeProperty == Something)
{
o.SomeOtherProperty = true;
}
}

无论如何要做到这一点,使用 Linq,使其成为一行?

最佳答案

LINQ 对于执行副作用并不是那么有用,它主要用于查询。事实上,它的延迟执行在其行为中根深蒂固这一事实使其成为执行副作用的糟糕选择,IMO。

你的代码在我看来非常完美。不过,如果您确实想使用 LINQ,我怀疑您能否在以下方面做出很大改进:

foreach (var o in obj.Where(i => i.SomeProperty == Something))
{
o.SomeOtherProperty = true;
}

现在,这并没有比您原来的更好(可以说更糟)。

另一方面,如果您想创建一个新的流媒体序列,其中包含具有所需特征的原始项目的投影,您可以执行以下操作:

var projection = obj.Where(i => i.SomeProperty == Something)
.Select(i => new Foo(i) { SomeOtherProperty = true });
// assuming your type has a copy-constructor

编辑:如果您不想听从专家的建议(阅读:Eric Lippert),您可以编写自己的扩展方法:

public static void Do<T>(this IEnumerable<T> source, Action<T> action)
{
if (source == null)
throw new ArgumentNullException("source");

if (action == null)
throw new ArgumentNullException("action");

foreach (T item in source)
action(item);
}

这将使您能够:

obj.Where(o => o.SomeProperty == Something)
.Do(o => o.SomeOtherProperty = true);

关于C# Linq - 来自 SQL 的 SET 语法,即 SET abc(obj 的属性)WHERE xyz = true in IEnumerable<obj>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3983948/

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