首页 / .NET / 正文

[.NET].NET/C#程序开发中使用LINQ如何修改集合List<T>中的所有元素的属性值?

13883 发布于: 2018-02-20 读完约需6分钟

问题描述

在.NET/C#程序开发中,使用LINQ如何修改集合List<T>中的所有元素的属性值?
比如以下的伪代码:

登录后复制
foreach (var c in collection) { c.PropertyToSet = value; }

在.NET/C#程序开发中,使用Linq如何实现以上的foreach循环,以达到修改集合collection中所有元素的指定属性值的目的呢?

方案一

使用LinqSelect静态扩展方法,如下:

登录后复制
collection.Select(c => {c.PropertyToSet = value; return c;}).ToList();

方案二

使用List<T>ForEach()方法,如:

登录后复制
collection.ToList().ForEach(c => c.PropertyToSet = value);

方案三

使用LinqAll方法,如:

登录后复制
Collection.All(c => { c.needsChange = value; return true; });

方案四

创建静态扩展方法,如:

登录后复制
public static void Iterate<T>(this IEnumerable<T> enumerable, Action<T> callback) { if (enumerable == null) { throw new ArgumentNullException("enumerable"); } IterateHelper(enumerable, (x, i) => callback(x)); } public static void Iterate<T>(this IEnumerable<T> enumerable, Action<T,int> callback) { if (enumerable == null) { throw new ArgumentNullException("enumerable"); } IterateHelper(enumerable, callback); } private static void IterateHelper<T>(this IEnumerable<T> enumerable, Action<T,int> callback) { int count = 0; foreach (var cur in enumerable) { callback(cur, count); count++; } }

调用方法:

登录后复制
collection.Iterate(c => { c.PropertyToSet = value;} );

方案五

另一个静态扩展方法:

登录后复制
public static int Update<TSource>(this IEnumerable<TSource> source, Func<TSource> action) { if (source == null) throw new ArgumentNullException("source"); if (action == null) throw new ArgumentNullException("action"); if (typeof (TSource).IsValueType) throw new NotSupportedException("value type elements are not supported by update."); var count = 0; foreach (var element in source) { action(element); count++; } return count; }

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [ASP.NET Core]ASP.NET Core Razor Pages或者MVC应用程序中如何将URL路径设置为小写的?

下一篇: [.NET]C#/.NET程序开发中如何截断一个字符串?

本文永久链接码友网 » [.NET].NET/C#程序开发中使用LINQ如何修改集合List<T>中的所有元素的属性值?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册