.NET 匿名方法的BUG,请专家解答
匿名方法是.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年注册的,可是博文只写了几个,感谢大家的热情回复!
此题可以结了。请大家看回复之后,如果有补充的地方再回复!
.NET 匿名方法的BUG,请专家解答的更多相关文章
- Oracle Cannot Update TOP N Issue, 请专家解答
大家好 上周写了匿名方法一文,很多读者,很高兴,相信我们已经从大伙的回复中,对.NET又有了更深刻的认识. 好,现在说主题,各类数据库都有相应更新本表top n的方案.现在我一一举例 首先看表结构如下 ...
- 09.C#委托转换和匿名方法(五章5.1-5.4)
今天将书中看的,自己想的写出来,供大家参考,不足之处请指正.进入正题. 在C#1中开发web form常常会遇到使用事件,为每个事件创建一个事件处理方法,在将方法赋予给事件中,会使用new Event ...
- 编写高质量代码改善C#程序的157个建议[为泛型指定初始值、使用委托声明、使用Lambda替代方法和匿名方法]
前言 泛型并不是C#语言一开始就带有的特性,而是在FCL2.0之后实现的新功能.基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型,确保了类型安全.委托 ...
- C# 匿名方法
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...
- 初始化JQuery方法与(function(){})(para)匿名方法介绍
一.初始化JQuery对象 DOM加载完成时运行代码 1.$(document).ready(function(){ 全写 // 在这里写你的代码... }); 2.jQuery(function() ...
- 通过Func 委托理解委托和匿名方法及Lambda 表达式
Func<T, TResult> 委托 封装一个具有一个参数并返回 TResult 参数指定的类型值的方法. 命名空间: System 程序集: mscorlib(在 mscorlib.d ...
- C# 委托、匿名方法、lambda简介
在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个First不 ...
- Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)
Delegate,Action,Func,匿名方法,匿名委托,事件 (转载) 一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本 ...
- C# 委托、匿名方法、扩展方法
一.委托的使用: 详细委托和事件解释请看另一篇:http://www.cnblogs.com/Liyuting/p/6760706.html 二.匿名方法 三.扩展方法
随机推荐
- Log4j(3)--rootLogger根配置和appender输出类型配置
参考博客:http://blog.java1234.com/blog/articles/270.html 一.rootLogger根配置: Log4j 根配置语法 log4j.rootLogger = ...
- [html][javascript]父子窗体传值
父窗体 <script type="text/javascript"> newwindow = window.open("b1.html",&quo ...
- 【转】httpservlet 文章
HttpServlet类 ellisonDon 2012-10-25 12:42 阅读:2015 评论:0 HttpServlet的功能 ellisonDon 2012-10-25 11:02 ...
- Java 8 : Stream API 练习
//店铺属性类 public class Property { String name; // 距离,单位:米 Integer distance; // 销量,月售 Integer sales; // ...
- PyQt5系列教程(五)制作fastboot烧写器
软硬件环境 Windows 7 Python 3.4.2 PyQt 5.5.1 PyCharm 5.0.2 前言 fastboot是针对Android设备的一种刷机方式,它比recovery更底层,刷 ...
- redis相对关系型数据库的优势
它是键值数据库(非关系),数据查询比关系型数据库快. ps:redis是树状结构,查询快 redis是基于内存的一个数据库,I/O的效率影响较小. ps: 备份数据同步是才进行I/O操作.这个数据同步 ...
- asp.net 不用控件,自动登录(用于和其他系统对接的时候,自动登录系统,用户体验好)
if (System.Web.Security.Membership.ValidateUser("admin", "123456")) { //这句话很重要,他 ...
- (网页的缓存控制)HTML配置no-cache(备忘) “Cache-control”常见的取值
HTML配置no-cache(备忘) No-cache配置 html表头如下 <meta http-equiv="Content-Type" content="te ...
- windows到ubuntu
按照xmarks同步浏览器书签. mvn, copy setting.xml 最好不要用apt-get install maven, 占用/的磁盘空间 mvn -U package -P"d ...
- 初认识ZK
转自:https://www.jianshu.com/p/8e322462bcca 前言: 前段时间做了sdk直播服务,由于给游戏接入,所以必须要考虑并发性能问题,大家知道直播聊天,房间人数多了的话是 ...