Ami*_*aei 2 c# extension-methods
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]);
}
}
Run Code Online (Sandbox Code Playgroud)
样品:
List<string> fruits = new List<string> { "ApPel", "BANana", "oRANGE" };
fruits.Apply((x) => x.ToUpper());
Run Code Online (Sandbox Code Playgroud)
结果:APPLE BANANA ORANGE
Yur*_*ich 11
fruits = fruits.Select(x => x.ToUpper()).ToList();
Run Code Online (Sandbox Code Playgroud)
您正在创建一个就地版本List<T>.ConvertAll:
fruits = fruits.ConvertAll(f => f.ToUpper());
Run Code Online (Sandbox Code Playgroud)
ConvertAll比Select(...).ToList()它快,因为它永远不需要调整列表的大小.
编辑:当你打电话时.Select(...).ToList(),ToList()电话不知道原始列表有多大.因此,它将创建一个小数组,然后在数组填满时重复调整数组大小.
相比之下,它ConvertAll是原始列表的一部分,并且知道它有多大.因此,它可以立即分配正确大小的数组,因此它永远不需要调整数组的大小.
您的方法比其中任何一个都快,因为您正在修改列表.(你永远不会创建一个新的列表)