我有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'循環。 –