.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 二.匿名方法 三.扩展方法
随机推荐
- Esxi5-管理平台vcenter5.0_数据库迁移流程
migrating-vcenter-database-express-to-sql-2008-r2 一. 准备环境. ESXi5.0主机 IP:192.168.1.158 ...
- 常见的加密和解密算法—DES
一.DES加密概述 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并 ...
- android中一个评分的控件
RatingBar android中一个评分的控件 如何使用 Android Studio下: dependencies { compile 'com.hedgehog.ratingbar:app:1 ...
- user_add示例
#!/usr/bin/python3# -*- coding: utf-8 -*-# @Time : 2018/5/28 16:51# @File : use_test_add.py 数据 ...
- solr学习之六--------Analyzer(分析器)、Tokenizer(分词器)
首先,不知道大家在前面的例子中没有试着搜索文本串,就是在第二节,我们添加了很多文档.如果字段值是一个文本.你如果只搜索这个字段的某个单词,是不是发现搜不到? 这就是因为我们没有配置Analyzer,因 ...
- String(byte[] bytes, Charset charset) 和 getBytes() 使用
转自:https://techbirds.iteye.com/blog/1855960 @Test public void testBytes(){ //字节数 //中文:ISO:1 GBK:2 UT ...
- 怎么改变Eclipse中项目的运行服务器
eclipse中-->选定项目-->右键-->弹出 Properties for项目名 -->选择server子项-->选择需要的server即可(Always use ...
- //todo 的用处
在代码中添加 //todo 以后要做的事 可以暂时打上标记,以后再来处理. 光有这个没什么用,关键是IDE要支持,比如VS2017,只要按下 ctrl+w,t 就可以在输出窗口中显示出所有 todo的 ...
- 41. First Missing Positive (HashTable)
Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] ...
- 26.Remove Duplicates from Sorted Array(Array)
Given a sorted array, remove the duplicates in place such that each element appear only once and ret ...