gpt4 book ai didi

c# - 使用 lambda 更新对象的值

转载 作者:行者123 更新时间:2023-11-30 19:18:55 26 4
gpt4 key购买 nike

我有一个 Question 类型的 IEnumerable.. 类 Question 有属性,Question(string) 和 Id(int)

我想做的是,如果 IEnumerable 中任何对象的问题长度 > 25然后“子串”它并添加“...”

所以我的想法是这样的:

ienumQuestions.Where(e=>e.Question.Length > 25).Change(e.Question=>e.Question.Substring(25)+"...");

现在我不确定该语法是否 100% 正确,但我希望你能理解这一点..

有办法做到这一点吗?..我真的不想为此创建一个循环..因为我根本不喜欢循环:)

提前致谢!

最佳答案

谨慎对待

您可以使用 LINQ 中著名的 ForEach 扩展方法来循环访问每个项目并相应地对其进行操作。本质上它与您描述的 Change 方法相同,并且看起来像这样:

ForEach LINQ扩展方法

public static void ForEach<TSource>(this IEnumerable<TSource> source, Action<TSource> action)
{
foreach(TSource item in source)
{
action(item);
}
}

实现

ienumQuestions.Where(e => e.Question.Length > 25).ForEach(e =>
{
e.Question = e.Question.Substring(0, 25) + "...";
});

// or
ienumQuestions.ForEach(e =>
{
if (e.Question.Length > 25)
{
e.Question = e.Question.Substring(0, 25) + "...";
}
});

论证和课外阅读

我个人不喜欢使用 ForEach LINQ 扩展直接更新对象的方法,我更喜欢将其仅供引用。我强烈建议阅读 "foreach vs ForEach"但在采用它之前,因为它本质上违背了 LINQ 的原则,因为它直接修改集合中的对象,而这正是 LINQ 最初不打算做的。

关于c# - 使用 lambda 更新对象的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10977549/

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