簡體   English   中英

使用LINQ為集合中的所有對象的屬性賦值的最佳方法

[英]Best way to assign a value to a property of all objects in a collection using LINQ

我有一個帶有ResaleValue屬性的Car對象,我將這些car對象的集合存儲在:

 IEnumerable<Car>

我還有一個帶有計算方法的ResaleCalculator()。

在linq中有沒有辦法應用計算並在沒有循環的情況下設置集合中每個對象的ResaleValue屬性?

你真的不想使用LINQ。 首先,你沒有避免循環,你只是將它抽象出來。 其次,LINQ方法旨在過濾和/或投射序列,而不是使其變異。 雖然你可以使用List<T>上的.ForEach 實例方法來不顯式地編寫循環,但是簡單地編寫循環來完成你需要它做的事情並不是很清楚。

我想這會做你想要的

cars.Select(c=>c.ResaleValue = c.Calculate());

您無法修改IEnumerable<T>而無需將這些值設置為ResaleValue屬性並復制現有屬性,從而無法投影到新的IEnumerable中。 理想情況下,當你第一次獲得IEnumerable<Car>時,你會這樣做。

IEnumerable<Car> cars = // however you set cars originally
cars = cars.Select(c => new Car
            {
                Prop1 = c.Prop1,
                Prop2 = c.Prop2,
                ResaleValue = ResaleCalculator(params)
             });

顯然這並不理想。 另一方面,您可以ToList()您的集合並使用ForEach方法或常規foreach循環:

var list = cars.ToList()
               .ForEach(c => c.ResaleValue = ResaleCalculator(c.SomeNeededParam));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM