我有Beam
对象的列表。当使用LINQ的Width
属性大于40时,如何更改光束的IsJoist
属性?使用LINQ更改列表中对象的属性
class Beam
{
public double Width { get; set; }
public bool IsJoist { get; set; }
}
var bm1 = new Beam { Width = 40 };
var bm2 = new Beam { Width = 50 };
var bm3 = new Beam { Width = 30 };
var bm4 = new Beam { Width = 60 };
var Beams = new List<Beam> { bm1, bm2, bm3, bm4 };
这是我所做的,但我只得到一个列表。我希望新列表与原始列表相同,只是某些梁的IsJoist属性将设置为true。
var result = Beams
.Where(x => x.Width > 40)
.Select(x => x.IsJoist = true)
.ToList();
我能够实现这一点如下。是否可以,因为LINQ是用于查询的?
var result = Beams
.Where(x => x.Width > 40)
.Select(x =>
{
x.IsJoist = true;
return x;
})
.ToList();
你不能。这些方法**的全部要点在于它们是功能性的。那是......他们有**没有副作用**。除非你在'List'类型中使用“破坏”方法'ForEach'。 –
@SimonWhitehead我实际上找到了答案,它正在工作,但我不知道这是否是好习惯? – Vahid
永远不会永远不会使用选择行为像更新,这是一个可怕的编程习惯。使用LINQ *提问*,而不是*进行更改*。如果你想改变,使用'foreach'循环。 –