c# - parameter - wpf lambda expression
使用lambda表達式將對象列表從一種類型轉換為另一種類型 (5)
嘗試以下操作
var targetList = origList
.Select(x => new TargetType() { SomeValue = x.SomeValue })
.ToList();
這是使用Lambdas和LINQ的組合來實現解決方案。 Select函數是一種投影樣式方法,它將傳遞給委託(或本例中的lambda)應用於原始集合中的每個值。 結果將在新的IEnumerable<TargetType>
。 .ToList調用是將此IEnumerable<TargetType>
轉換為List<TargetType>
的擴展方法。
我有一個foreach循環讀取一種類型的對象列表,並產生不同類型的對象列表。 我被告知lambda表達式可以達到相同的結果。
var origList = List<OrigType>(); // assume populated
var targetList = List<TargetType>();
foreach(OrigType a in origList) {
targetList.Add(new TargetType() {SomeValue = a.SomeValue});
}
任何幫助將不勝感激 - 我是lambda和linq感謝,s的新手
如果你知道你想從List<T1>
轉換為List<T2>
那麼List<T>.ConvertAll
比Select
/ ToList
效率稍高,因為它知道開頭的確切大小:
target = orig.ConvertAll(x => new TargetType { SomeValue = x.SomeValue });
在更一般的情況下,當您只將源代碼作為IEnumerable<T>
來使用時,使用Select
/ ToList
是一種ToList
的方法。 你也可以爭辯說,在一個使用LINQ的世界裡,開始時更習慣於......但至少應該意識到ConvertAll
選項。
這是一個簡單的例子..
List<char> c = new List<char>() { 'A', 'B', 'C' };
List<string> s = c.Select(x => x.ToString()).ToList();
List<target> targetList = new List<target>(originalList.Cast<target>());
var target = origList.ConvertAll(x => (TargetType)x);