如何交换泛型List中每个实例的两个属性,LINQ Select语法如何实现?
实现方案
你可以通过LINQ的Select方法实现属性交换,按是否修改原实例分为两种实现方式:
方式1:无副作用实现(推荐,符合LINQ设计规范)
该方式不会修改原有aList中的实例,会返回全新的、已交换属性的A类实例集合:
var swappedList = aList.Select(a => new A { BInstance1 = a.BInstance2, BInstance2 = a.BInstance1 }).ToList();
方式2:修改原实例
如果需要直接修改原集合内的A类实例属性,可以使用带语句块的lambda实现,C# 7及以上版本可直接用元组语法简化交换逻辑:
// 该写法会修改原aList内所有A实例的属性 var resultList = aList.Select(a => { // 元组语法交换两个属性 (a.BInstance1, a.BInstance2) = (a.BInstance2, a.BInstance1); return a; }).ToList();
如果使用C# 7以下版本,可通过临时变量实现交换:
var resultList = aList.Select(a => { B temp = a.BInstance1; a.BInstance1 = a.BInstance2; a.BInstance2 = temp; return a; }).ToList();
注意:如果你的需求仅为修改原集合属性,不需要生成新集合,其实直接用
List<T>的ForEach方法更合适,只是你明确要求使用Select扩展方法才提供上述实现。
内容的提问来源于stack exchange,提问作者AmandaSai98b
相关产品推荐
相关产品推荐

