public static void Apply<T>(this IList<T> source, Func<T, T> func)
{
for (int i = 0; i < source.Count; i++)
{
source[i] = func.Invoke(source[i]);
}
}
样品:
List<string> fruits = new List<string> { "ApPel", "BANana", "oRANGE" };
fruits.Apply((x) => x.ToUpper());
结果:APPLE BANANA ORANGE
答案 0 :(得分:11)
fruits = fruits.Select(x => x.ToUpper()).ToList();
答案 1 :(得分:9)
您正在创建List<T>.ConvertAll
的就地版本:
fruits = fruits.ConvertAll(f => f.ToUpper());
ConvertAll
比Select(...).ToList()
快,因为它永远不需要调整列表大小。
编辑:当您拨打.Select(...).ToList()
时,ToList()
来电并不知道原始列表有多大。因此,它会创建一个小数组,然后在数组填满时重复调整数组大小
相比之下,ConvertAll
是原始列表的一部分,并且知道它有多大。因此,它可以立即分配正确大小的数组,因此它永远不需要调整数组的大小。
您的方法比其中任何一个都快,因为您正在修改列表。 (你永远不会创建一个新的列表)
答案 2 :(得分:1)
LINQ Select
运算符执行此操作。
Select<TSource, TResult>(IEnumerable<TSource>, Func<TSource, TResult>)
Select<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, TResult>)