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

.NET 作者: Rector 379阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

在.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;
    }

阅读了该文章的人还浏览了...

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

发布于: 2018-02-20 07:42:02
分享扩散:

文章评论

获取验证码