最新评论
Re:基础知识 hbfly 2011-12-22 15:16
NET中的List<T>非常方便,但是很遗憾得是没有自带更方便的一些排序、查找函数。比如说,Sort()和Find()方法都包含在 List<T>里,但果你想使用,你得自己写函数。这往往会让我们感到不爽。其实这些Sort() Find()方法想要的都只是一个一句话delegate而已。
本文讨论非LINQ的方法,适用于.NET2.0以上平台,主要讨论以下 三个方法:
List<T>.Sort()
List<T>.Find()
List<T>.Exist()
先 看List<T>.Sort()。其定义是:public void Sort( Comparison<T> comparison )
其 要求传入的参数是Comparison<T> comparison。那看看Comparison<T> comparison 要求传入哪些参数、返回什么样的值。
查阅MSDN后,发现Comparison<T> 要求传入两个T的示例,即t1和t2;返回结果是整数,如果t1t2返回1,和字符串比较的返回方式一样。
于是可以这样设计 delegate:
listVideoItems.Sort(delegate(VideoItem v1, VideoItem v2) { return Comparer.Default.Compare(v1.Title, v2.Title); });
上面 的代码是对实体的Title属性进行排序,采用字符串比较的返回值作为delegate的返回值,呵呵,很简单很巧妙吧^_^
2. 接下来看看List<T>.Find()和List<T>.Exist()
Find()的定义如下:
public T Find( Predicate<T> match )
Exist也类似:
public bool Exists( Predicate<T> match )
看出来了吧?呵呵,只要设计好Predicate<T> match 这个参数的delegate,Find()和Exists()这两个函数都可以用了。
查询MSDN发 现,Predicate<T> 要求传入一个T的实体,并返回这个T是不是存在的布尔结果。
非常简单就可以写出:
VideoItem video= listVideoItems.Find(delegate(VideoItem v) { return v.Title== xxxxx; })
以上代码表示按照标题查找实体,当然xxxxx你可以替换成别的,变量和硬代码都可。v.Title == xxxxx 这种方式也可以改为 v.Minutes > 25 或其他,只要能返回布尔结果即可。
同样的delegate也可以 用在Exists()中:
bool flag= listVideoItems.Exists(delegate(VideoItem v) { return v.Minutes > 25 ;})
最后,List<T>当中还有一个非常好用的 FindAll()方法,也相当好用,相信看完本文的朋友马上就能写出delegate来。
楼主这里面有个伪命题,也就是社会统筹部分完全跟自己不相干,你交了也白交,对自己没有好处。
自己退休后的养老金构成是:个人账户+国家统筹,这个国家统筹部分只要是退休人员,所有人得到的钱都是一样。同时也能使发放的养老金不至于贫富分化太厉害
Re:基础知识 hbfly 2011-10-21 17:40
C#的多线程机制
lock : 锁定特定的代码段
Monitor(Enter/Exit):锁定共享的资源
ThreadPool:利用系统管理线程ThreadPool.QueueUserWorkItem(new WaitCallback(函数名));
Timer:定时启动
Mutex:互斥量用于控制多线程之间的联系
Re:最精简SQL教程,查漏补疑 hbfly 2011-10-21 16:03
其他:
----简单try catch示例,无法处理错误
begin try select * * from student;
end try
begin catch exec proc_error_info;
end catch
go
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]
或者
[!charlist]
不在字符列中的任何单一字符
SELECT * FROM Persons
WHERE City LIKE '[ALN]%'
Re:最精简SQL教程,查漏补疑 hbfly 2011-10-21 16:03
查询优化
得出以上速度的方法是:在各个select语句前加:
declare @d datetime
set @d=getdate()
并在select语句后加:
select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())
查询优化器 SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。形式如下:
列名 操作符 <常数 或 变量>
无法利用索引的sql语句 like% or NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE (WHERE 价格*2>5000)(ABS(价格)<5000)(有计算或函数则无法用索引)
顺序:应先进行表空间的优化(类似磁盘碎片整理),回滚段的优化(回空间分配250M左右.常识),索引优化,再进行查询语句的优化
Re:最精简SQL教程,查漏补疑 hbfly 2011-10-21 15:51
锁:解决数据并发操作引起的数据不一致
脏读:a事务修改,b读取了,但a回滚了,哎!
级别:row page extent table database
模式:独占(别人不让动)\共享(只读)\更新(限制更新等不限制读取)
SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除
SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除
Re:最精简SQL教程,查漏补疑 hbfly 2011-10-21 14:43
•(inner) JOIN: 如果表中有至少一个匹配,则返回行
•LEFT JOIN: (左表数据全部显示,右表没对应的显示empty)即使右表中没有匹配,也从左表返回所有的行
•RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
•FULL JOIN: (2表都显示,没有的则empty)只要其中一个表中存在匹配,就返回行
re: 用C#创建各种类型的wave文件 韦恩卑鄙 2009-05-03 16:27
您在msdn的问题我已经答复 :)
您好 如果您要作 byte 的缓存 只要用 new queue<byte>(1024*n) 就好了
n 是缓存大小 不需要用 stream
queue的本质是一个数组内的循环队列 只要缓存没有溢出 这个模型可以支持一个写入进程和一个读出进程而完全不需要上锁
另外 向您推荐 LinkList<byte[]> 这个夜能做到 queue 一样的先进先出 我个人推荐用这个 因为可以和“按秒写入”方式兼容 您不一定需要以byte为单位的写入 可能每次要写一个内存快 这样 <byte[]> 可以轻松胜任
看截图.可以肯定以下:
楼主的VS不是处于调试期,所以控制台是独立运行的.与VS里的代码没有任何关联!也就是控制台窗口运行的代码有可能根本就不是现VS窗口里看到的代码(比如旧代码或其它代码程序).所以想出什么效果都可以.
我觉得应该不是楼主写的,可能是楼主离开了电脑一会儿,有其它同事过来敲了这些字,祝他节日快乐。所以楼主也不知情。
楼主你这块大烧饼(哈哈)——你在微软工作。。。直接问他们不就得了?!~
@沛沛
@Jickie
你们俩真是太强了,本来我还怕这帖子被人认为有点哗众取宠,感谢两位增加技术含量,
郑重声明:我真的没有任何特别操作,只是简单执行了一下程序,也没重写console类。17楼也出一次,我这里也是再执行一次就不出现了,见鬼了,不过,我到真有点信1-2-3的推断了
#17楼 58.209.71.* 2008-12-25 11:35 路人甲@1225 [未注册用户]
我也出现了,就一次而已
--引用--------------------------------------------------
CJK674: 我这个算不算???人格保证我的图片是真的,呵呵,请高人告诉我这是怎么出来的<br />
<img alt="" src="/images/cnblogs_com/chenjink674/QQ截图未命名.gif" /><br />
--------------------------------------------------------
运行控制台后,在Main入口的最前面设置一个断点,
启动调试,当程序运行到设置好的断点停留下来的时候,
在监视里面输入代码“ Console.WriteLine(Happy Birthday ! Tony!)”,这个时候监视器运行结果“表达式没有值”,
接着让程序跳过节点继续执行,在控制太上就会出现你说的结果了...
呵呵~~
有意思....
后边的提示符
当然楼主是把他的静态类Console隐藏起来了
我在这里把整个过程展示出类,
@CJK674
真不知道你那咋做的,
@沛沛
重写console类也实现不了后面出现输入提示符呀,这也是大伙怀疑我是自己输入的原因
其实他的电脑被我远程控制了,另外我告诉大家一个事情,我发现楼主昨天看了黄
看这是不是解:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace Test
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 Console.WriteLine(System.DateTime.Now.ToString());
13 Console.ReadKey();
14 }
15 }
16
17
18 static class Console
19 {
20 public static void WriteLine(string s)
21 {
22 System.Console.WriteLine(s);
23 System.Console.WriteLine("merry christmas!");
24
25
26 }
27 public static void ReadKey()
28 {
29 System.Console.ReadKey();
30 }
31 }
32 }
我这个算不算???人格保证我的图片是真的,呵呵,请高人告诉我这是怎么出来的

@Jickie
不是这么做的,呵呵,一般人会很难想到的,我昨天刚刚在某个群里做做这个演示.这个是执行好的结果,我没有在执行时做任何的手工干预
re: c#彩蛋 控制台程序今天自动出现merry christmas G yc {Son of VB.NET} 2008-12-25 13:39
对 编译出来 内容感兴趣了~~
楼主,做什么的?难道是MSN 开发团队的?
PS。不是你们机器集体被遥控了吧?
@xiaopohai_long
@大家
我真的不是闲的忽悠大家,这现象只出现了一次,我每天上班第一件事就是运行这程序。
我自己再找原因吧,暂时就算是给大家的小小礼物吧,不过找到原因我会给大家解释
嗯,根据我名侦探柯南的分析,是这样滴:楼主编译,运行,突然有点那啥,就去了趟WC,这时楼主的同事就在那里输入了圣诞快乐,等楼主回来……
--引用--------------------------------------------------
xiaopohai_long: 首先楼主为了给大家送来祝福,谢谢了。可是这个不好玩的啊。。。
大家看看Console.Read()函数,会接受用户的输入,如果你输入了Merry Christmas! 这个现象就出现了。呵呵。。。。只能说楼主很有心思,不过有点骗人。。。哈哈
--------------------------------------------------------
被楼主巧妙的转移了注意力....可以说楼主成功了......
如果你说的话是事实的话,请告诉我们你机器的环境?把后面的Console.Read()方法去掉还会有吗?
@过路者
我晕,我真没闲的和大家打哑谜,
我的英语已经烂到christmas都要查字典才会写。肯定不是自己输入的
只可能是早上没睡醒。。。。,
人格保证以下说的是真的,呵呵,请高人告诉我这是怎么出来的
1)代码中没有任何输出的merry christmas
2)附上运行时的源文件,方便大家看IL
楼主只保证了这两点,却没有保证不输入merry christmas,哈哈
首先楼主为了给大家送来祝福,谢谢了。可是这个不好玩的啊。。。
大家看看Console.Read()函数,会接受用户的输入,如果你输入了Merry Christmas! 这个现象就出现了。呵呵。。。。只能说楼主很有心思,不过有点骗人。。。哈哈
@楼主去死吧
忽略你吧,还被你熏了。
搭理你吧,还懒得和你一般见识,
你纯粹没事找抽型
@颜斌
客串,园子里好多弟兄都在外包公司吧,有机会咱也组织个联谊会
@路人甲@1225
真的吗?我也就一次呀,抓图了吗?