#define badcode
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
int[] denominators = { 1, 2, 3 };
ThreadPool.QueueUserWorkItem(Divide100By, denominators);
Thread.Sleep(50);
//外部改变参数
denominators[2] = 0;
Console.ReadLine();
}
private static void Divide100By(object o)
{
#if badcode
int[] denominators = (int[])o;
#else
int[] denominatorsinput=(int[])o;
int[] denominators=new int[denominatorsinput.Length];
Array.Copy(denominatorsinput,denominators,denominators.Length);
#endif
for (int index = 0; index < denominators.Length; index++)
{
if (denominators[index] == 0)
{
throw new ArgumentOutOfRangeException("denominators", string.Format("索引 {0} 处为 0", index));
}
}
Console.WriteLine("验证通过 ");
Thread.Sleep(100);
//这里denominators[0] 被外部改变为0
for (int index = 0; index < denominators.Length; index++)
{
Console.WriteLine("100 / {0} ={1}", denominators[index], 100 / denominators[index]);
}
}
}