匿名方法是.NET 3.5之后的一个好东东,很多人使用,但是我在最近的工作当中发现了一个问题. 请专家解答
//list里存放10个数字
List<int> list = new List<int>();
for (int i = ; i < ; i++)
{
list.Add(i);
} //10个数字,分成10组,其实每组就一个元素,每组的元素是不相同的
Dictionary<int, List<int>> dict = new Dictionary<int, List<int>>();
for (int i = ; i < ; i++)
{
int k = i % ;
if (dict.ContainsKey(k))
{
dict[k].Add(i);
}
else
{
dict[k] = new List<int>();
dict[k].Add(i);
}
}
接下来,我们先采用非匿名方法,实现打印每个组里的元素,代码如下
using (Dictionary<int, List<int>>.Enumerator enumerator = dict.GetEnumerator())
{
KeyValuePair<int, List<int>> keyValue;
while (enumerator.MoveNext())
{
keyValue = enumerator.Current; System.Threading.Thread thread = new System.Threading.Thread(Display);
thread.Start(keyValue.Value);
}
} public static void Display(object o)
{
List<int> list = o as List<int>;
foreach (var item in list)
{
Console.WriteLine(item.ToString());
}
}
输出的结果是:
0
1
2
3
4
5
6
7
8
9
没有问题!!! 一切OK
好,我们换一种方式为实现输出各组的元素,采用匿名委托的方式.
using (Dictionary<int, List<int>>.Enumerator enumerator = dict.GetEnumerator())
{
KeyValuePair<int, List<int>> keyValue;
while (enumerator.MoveNext())
{
keyValue = enumerator.Current;
System.Threading.Thread thread = new System.Threading.Thread(delegate()
{
foreach (var item in keyValue.Value)
{
Console.WriteLine(item.ToString());
}
}
);
thread.Start();
}
}
采用上面的代码,输出的结果不定,而且会出现重复的数据,结果可能如下
3
3
3
4
4
4
5
5
7
9
请专家解答一下,我一直没有找到原因!
这个号是09年注册的,可是博文只写了几个,感谢大家的热情回复!
此题可以结了。请大家看回复之后,如果有补充的地方再回复!