模板一:安全的批量数据处理
public staticclass SafeListProcessor
{
publicstaticvoid ProcessInPlace<T>(List<T> list, Action<T[]> processor)
{
if (list.Count == 0) return;
int originalCapacity = list.Capacity;
T[] items = list.ToArray();
processor(items);
for (int i = 0; i < list.Count && i < items.Length; i++)
{
list[i] = items[i];
}
Debug.Assert(list.Capacity == originalCapacity, "List was modified during processing!");
}
}
模板二:高性能数值计算
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
namespace MathExtensionsDemo
{
publicstaticclass MathExtensions
{
public static void ApplyTransform(this List<float> values, Func<float, float> transform)
{
var span = CollectionsMarshal.AsSpan(values);
for (int i = 0; i < span.Length; i++)
{
span[i] = transform(span[i]);
}
}
public static float FastSum(this List<float> values)
{
var span = CollectionsMarshal.AsSpan(values);
float sum = 0f;
for (int i = 0; i < span.Length; i++)
{
sum += span[i];
}
return sum;
}
}
internal class Program
{
static void Main(string[] args)
{
// 设置控制台为 UTF-8,确保中文输出正常
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("演示:MathExtensions(ApplyTransform 与 FastSum)");
Console.WriteLine();
// 示例 1:普通列表,给每个元素 +10,然后求和
var list1 = new List<float> { 1f, 2f, 3f, 4f, 5f };
Console.WriteLine("示例 1 - 原始列表: " + string.Join(", ", list1));
list1.ApplyTransform(x => x + 10f);
Console.WriteLine("示例 1 - 变换后: " + string.Join(", ", list1));
Console.WriteLine($"示例 1 - FastSum: {list1.FastSum()}");
Console.WriteLine();
// 示例 2:乘法变换
var list2 = new List<float> { 1.5f, 2f, -3f };
Console.WriteLine("示例 2 - 原始列表: " + string.Join(", ", list2));
list2.ApplyTransform(x => x * 2f);
Console.WriteLine("示例 2 - 变换后: " + string.Join(", ", list2));
Console.WriteLine($"示例 2 - FastSum: {list2.FastSum()}");
Console.WriteLine();
// 示例 3:空列表(应为 no-op)
var empty = new List<float>();
Console.WriteLine("示例 3 - 空列表,ApplyTransform 与 FastSum 测试");
empty.ApplyTransform(x => x + 1f); // 不会抛异常
Console.WriteLine("示例 3 - 变换后仍为空,FastSum = " + empty.FastSum());
Console.WriteLine();
// 示例 4:破坏性示例(演示风险 —— 不推荐在生产中这样做)
// 注意:在 transform 中修改原 list 的结构(Add/Remove)可能导致未定义行为或异常。
var list3 = new List<float>(capacity: 4) { 1f, 2f, 3f, 4f };
Console.WriteLine("示例 4 - 破坏性示例(演示危险行为,不推荐)");
Console.WriteLine("示例 4 - 变换前: " + string.Join(", ", list3));
try
{
list3.ApplyTransform(x =>
{
// 在处理器里修改原 list(会改变底层数组),这是危险操作
if (x == 2f)
{
list3.Add(99f);
}
return x + 1f;
});
Console.WriteLine("示例 4 - 变换后(注意:行为平台/实现相关,可能不一致): " + string.Join(", ", list3));
Console.WriteLine($"示例 4 - FastSum: {list3.FastSum()}");
}
catch (Exception ex)
{
Console.WriteLine("示例 4 - 处理期间抛出异常(这是预期风险的一部分):");
Console.WriteLine(ex);
}
Console.WriteLine();
// 示例 5:大列表性能测试(简单计时)
var rand = new Random(0);
var big = new List<float>(capacity: 1_000_000);
for (int i = 0; i < 1_000_000; i++)
big.Add((float)rand.NextDouble());
Console.WriteLine("示例 5 - 大列表性能测试(1,000,000 个元素)");
var sw = System.Diagnostics.Stopwatch.StartNew();
big.ApplyTransform(x => x * 1.000001f); // 轻微变化
sw.Stop();
Console.WriteLine($"ApplyTransform 用时: {sw.ElapsedMilliseconds} ms");
sw.Restart();
var sum = big.FastSum();
sw.Stop();
Console.WriteLine($"FastSum = {sum},用时: {sw.ElapsedMilliseconds} ms");
Console.WriteLine();
Console.WriteLine("演示结束。按任意键退出。");
Console.ReadKey();
}
}
}