博客统计信息

用户名:skyd
文章数:5
评论数:9
访问量:4777
无忧币:20
博客积分:140
博客等级:2
注册日期:2009-12-12

我最近发表的评论

我的技术圈(0)

更多>>
前些天由联邦快递送来的:)DSC00194包装盒DSC00199打开……DSC00215MVP证书
类别:未分类|阅读(91)|回复(3)|(0)阅读全文>>
2010-01-17 16:34:41
image引言自从用上扩展方法以来,就欲罢不能了,它们大大提升了我的代码编写效率,现在我已对其产生了高度依赖。在此分享一下自己的常用扩展方法集,方便大家使用。(其中有些是借鉴或挪用自其它博友的文章,在此尤其感谢鹤冲天的诸多分享)源代码在文章末尾处提供。 示例 public static string ExpandAndToString(this System.Collections.IEnumerable s, string 间隔字符)功能:将集合展开并分别执行ToString方法,再以指定的分隔符衔接,拼接成一个字符串。范例:[TestMethod]
public void TestMethod1()
{
var i = new int[] {1,5,33,14,556 };
var Out="1-5-33-14-556";
Assert.AreEqual(Out,i.ExpandAndToString("-"));
} public static bool IsNullOrEmpty(this string s)功能:验证字符串对象是否为空对象或空字符串。范例:[TestMethod]
public void TestMethod2()
{
string s = null;
Assert.AreEqual(true,s.IsNullOrEmpty());
s += "123";
Assert.AreEqual(false, s.IsNullOrEmpty());
} public static string IsNullOrEmptyThen(this string s, System.Func<string,string> 表达式)功能:验证字符串对象是否为空对象或空字符串,如果是的话,则执行传入表达式,并将表达式结果返回。范例:[TestMethod]
public void TestMethod3()
{
var s = "";
var Out = "1234";
Assert.AreEqual(Out, s.IsNullOrEmptyThen(f=>"1234"));
} public static void IsNullOrEmptyThen(this string s, System.Action<string> 表达式)功能:验证字符串对象是否为空对象或空字符串,如果是的话,则执行传入表达式。范例:[TestMethod]
public void TestMethod4()
{
var s = "";
s.IsNullOrEmptyThen(f => MessageBox.Show("无内容"));
} public static string FormatWith(this string s, params object[] 格式化参数)public static string FormatWith(this string s, object 格式化参数1)public static string FormatWith(this string s, object 格式化参数1, object 格式化参数2)public static string FormatWith(this string s, object 格式化参数1, object 格式化参数2, object 格式化参数3)功能:格式化字符串。范例:[TestMethod]
public void TestMethod5()
{
var i = 0.35;
var x = 200;
var Out = "i:35%;x:200;";
Assert.AreEqual(Out, "i:{0:0%};x:{1};".FormatWith(i,x));
} public static bool In<T>(this T t, params T[] 判断依据)功能:判断当前对象是否位于传入数组中。范例:[TestMethod]
public void TestMethod6()
{
var i = 95;
Assert.IsTrue(i.In(31, 3, 55, 67, 95, 12, 4));
} public static bool In<T, C>(this T t, System.Func<T,C,bool> 判断表达式, params C[] 判断依据)功能:判断当前对象是否位于传入数组中,判断方式由传入表达式指定。范例:[TestMethod]
public void TestMethod7()
{
var i = 95;
Assert.IsTrue(i.In((c, t) => c.ToString() == t, "31", "3", "55", "67", "95", "12", "4"));
} public static bool InRange<T>(this System.IComparable<T> t, T 最小值, T 最大值)public static bool InRange(this System.IComparable t, object 最小值, object 最大值)功能:判断当前值是否介于指定范围内。范例:[TestMethod]
public void TestMethod8()
{
var i = 95;
Assert.IsTrue(i.InRange(15, 100));
Assert.IsTrue(i.InRange(-3000, 300));
Assert.IsFalse(i.InRange(-1, 50));
var s = "b";
Assert.IsTrue(s.InRange("a", "c"));
Assert.IsTrue(s.InRange("1", "z"));
Assert.IsFalse(s.InRange("e", "h"));
} public static T Trace<T>(this T t)public static T Trace<T>(this T t, string 分类)public static T Trace<T>(this T t, System.Func<T,object> 表达式)public static T Trace<T>(this T t, System.Func<T,object> 表达式, string 分类)功能:将当前对象的值输出到Visual Studio输出窗口中,并将原始对象返回。此功能仅用于方便调试,可以在方法链中的任意步骤中输出值,而不会对方法链的连续性有任何影响。范例:[TestMethod]
public void TestMethod9()
{
var s = "abcdefg".Trace(f => f.ToUpper(), "表达式模式").Remove(4).Trace("普通模式");
var Out = "abcd";
Assert.AreEqual(Out, s);
//输出内容如下:
//表达式模式: ABCDEFG
//普通模式: abcd
} public static T TraceFormat<T>(this T t, string 格式化字符串)public static T TraceFormat<T>(this T t, string 格式化字符串, string 分类)功能:将当前对象的值经格式化后输出到VisualStudio输出窗口中,并将原始对象返回。此功能仅用于方便调试,可以在方法链中的任意步骤中输出值,而不会对方法链的连续性有任何影响。范例:[TestMethod]
public void TestMethod10()
{
var m = Math.Max(0.31, 0.65).TraceFormat("Max Value Is {0}", "格式化模式");
var Out = 0.65;
Assert.AreEqual(Out, m);
//输出内容如下:
//格式化模式: Max Value Is 0.65
} public static void ForEach<T>(this System.Collections.Generic.IEnumerable<T> source, System.Action<T> 操作)public static void ForEach<T>(this System.Collections.Generic.IEnumerable<T> source, System.Action<T,int> 操作)功能:遍历一个集合,执行指定操作。(重载形式中,传入表达式的int类型参数代表当前循环次数)范例:[TestMethod]
public void TestMethod11()
{
var l = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var c = 0;
l.ForEach(f => c += f);
var Out = 45;
Assert.AreEqual(Out, c);
l.ForEach((f, i) => c -= i);
Out = 9;
Assert.AreEqual(Out, c);
} public static Switch<T> Switch<T>(this T v)public static Case<T,R> Switch<T, R>(this T v, System.Func<R,R,R> Do)功能:判断当前值,根据不同匹配条件执行相应操作或返回相应的值。(重载形式中,允许通过表达式对每一次的返回值进行叠加处理)
详细使用说明参看:《稍加改进的Switch/Case扩展方法》范例:[TestMethod]
public void TestMethod12()
{
var i = 15;
i.Switch()
.CaseRun(15, f => MessageBox.Show("等于15"),false)
.CaseRun(f => f > 0, f => MessageBox.Show("大于0"))
.CaseRun(f => f < 0, f => MessageBox.Show("小于0"))
.DefaultRun(f => MessageBox.Show("等于0"));
var o = 'c'.Switch()
.CaseReturn('a', 1)
.CaseReturn('b', 2)
.CaseReturn('c', 3)
.CaseReturn('d', 4)
.CaseReturn(f => f > 'd', 5)
.DefaultReturn(0).ReturnValue;
Assert.AreEqual(3, o);
} public static System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(this T o, System.Func<T,IEnumerable<T>> 递归项选取表达式)public static System.Collections.Generic.IEnumerable<T> RecursionSelect<T>(this T o, System.Func<T,IEnumerable<T>> 递归项选取表达式, System.Predicate<T> 检验表达式)功能:递归选取项目,并将最终选定的集合返回。
相关原理说明参看:《c#扩展方法奇思妙用高级篇七:“树”通用遍历器》范例:[TestMethod]
public void TestMethod13()
{
//获取指定目录中所有包含子目录的目录集合
var d = new DirectoryInfo(@"C:\Users\Public\Downloads");
var c = d.RecursionSelect(f => f.GetDirectories(), f => f.GetDirectories().Length > 0);
MessageBox.Show(c.Count().ToString());
} public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(this System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> 递归项选取表达式)public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(this System.Collections.IEnumerable o, System.Func<T,IEnumerable<T>> 递归项选取表达式, System.Predicate<T> 检验表达式)public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(this System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> 递归项选取表达式)public static System.Collections.Generic.IEnumerable<T> RecursionEachSelect<T>(this System.Collections.Generic.IEnumerable<T> o, System.Func<T,IEnumerable<T>> 递归项选取表达式, System.Predicate<T> 检验表达式)功能:遍历当前集合对象,逐一递归选取项目,并将最终选定的集合返回。
相关原理说明参看:《c#扩展方法奇思妙用高级篇七:“树”通用遍历器》范例:[TestMethod]
public void TestMethod14()
{
//获取指定目录中所有包含子目录的目录集合
var l = new List<DirectoryInfo>();
l.Add(new DirectoryInfo(@"C:\Users\SkyD\Downloads"));
l.Add(new DirectoryInfo(@"C:\Users\Public\Downloads"));
var c = l.RecursionEachSelect(f => f.GetDirectories(), f => f.GetDirectories().Length > 0);
MessageBox.Show(c.Count().ToString());
} public static bool RegexIsMatch(this string s, string 表达式, System.Text.RegularExpressions.RegexOptions 选项)public static bool RegexIsMatch(this string s, string 表达式)public static System.Text.RegularExpressions.Match RegexMatch(this string s, string 表达式, System.Text.RegularExpressions.RegexOptions 选项)public static System.Text.RegularExpressions.Match RegexMatch(this string s, string 表达式)public static System.Text.RegularExpressions.MatchCollection RegexMatches(this string s, string 表达式, System.Text.RegularExpressions.RegexOptions 选项)public static System.Text.RegularExpressions.MatchCollection RegexMatches(this string s, string 表达式)public static string RegexReplace(this string s, string 表达式, string 替换值, System.Text.RegularExpressions.RegexOptions 选项)public static string RegexReplace(this string s, string 表达式, string 替换值)public static string[] RegexSplit(this string s, string 表达式, System.Text.RegularExpressions.RegexOptions 选项)public static string[] RegexSplit(this string s, string 表达式)功能:常用正则表达式功能封装,使用方法与Regex类相同。 public static T As<T>(this string s) where T : new(), 通用扩展.SpecialStringpublic static 通用扩展.HtmlString AsHtmlString(this string s)public static 通用扩展.PathString AsPathString(this string s)public static 通用扩展.ServerPathString AsServerPathString(this string s)public static 通用扩展.UriString AsUriString(this string s)public static 通用扩展.XHtmlString AsXHtmlString(this string s)public static 通用扩展.XmlString AsXmlString(this string s)功能:定义为特殊类型的字符串,以使用特有的格式化命令做进一步修改。(目前定义后的后续格式化功能比较有限,以后会逐步追加)范例:[TestMethod]
public void TestMethod15()
{
var s = @"C:\abc\";
var Out = @"C:\abc\1.exe";
Assert.AreEqual(Out, s.AsPathString().Combine(@"D:\1.exe".AsPathString().FileName));
} 结语这些都是我这里使用频率最高的扩展,希望对大家也同样有用:) 下载扩展方法源代码:http://www.uushare.com/user/icesee/file/2435046范例源代码:http://www.uushare.com/user/icesee/file/2435063本文的XPS版本:http://www.uushare.com/user/icesee/file/2435098[/img]..
类别:未分类|阅读(171)|回复(1)|(0)阅读全文>>
2009-12-30 00:42:47
image老赵免费送书,里面有一本叫《秘密》的书,简介也神秘兮兮的~:“哪儿来的书?我也不知道……”,我这人好奇心重,点开指向豆瓣的链接一看介绍:一位澳洲电视工作者,有一年,父亲突然身故、工作遭遇瓶颈、家庭关系也陷入僵局,就在人生跌落谷底、生活即将崩溃时,偶然间读到一本百年古书,发现了一个生命中的重大秘密,而过去知道这个祕密的,竟然都是历史上的伟大人物:柏拉图、莎士比亚、牛顿、雨果、贝多芬、林肯、爱默生、爱迪生、爱因斯坦。她不禁要问:「为什么不是每个人都知道呢?」
于是,她开始组织一个工作团队,寻找当世知道这个祕密的人。他们都是各行各业的佼佼者,并且现身说法告诉你:了解这个秘密,就没有做不到的事;不论你是谁,你想要什么,这个秘密都能给你!看完这段介绍,我就更好奇了…… 4b45b67f0bfa5734c5e9189c
于是我跑驴上搜了一下,有电子书,还有个电影:http://www.verycd.com/topics/192765/PS:链接页面的字幕是英文的,用射手播放器播放这个电影,能自动找到并下载对应的中文字幕。这年头有画谁还看字啊,于是就下了电影,准确说这不是个电影,是个讲座,但并不妨碍我对它的兴趣,它也确实并不枯燥,甚至可以说引人入胜。 里面所导向的人生观非常好,虽然很难立即让我们这些被马家唯物主义强奸过的人接受,但是人精神的能量的确是长期被我们所低估的,记得另一本书中曾有一个统计:西方人在每月13号是死亡高峰,东方人则在4号,导致人们死亡高发的原因仅仅是因为关于不吉利数字的迷信。意识能让我们迫近死亡,反之也能让我们迸发惊人的能量,我们可以左右自己的肉体状态,甚至也可以左右更多…… 而且量子力学也证明,虽然我们的意识不能控制和改变事物,但是事物脱离了我们的意识也会是处于混沌之中的,有了我们意识的参与,才有了整个宇宙万物的确切形态。是的,世界远不是唯物主义思想所描述的那么简单、乏味。 关于“秘密”,可能无可考证,可能只是个噱头,但是这种思想,即使不科学,也有益无害,你我都值得一试,也许你的人生观乃至你的人生都会从此刻开始改变。也许真的是这样:你有什么样的人生观,你就有什么样的人生。  以下将涉及内容透露和理论分析,没看过内容的朋友请止步,以免影响到你阅览/观看的兴趣。不希望将激昂的信仰尘归理论的朋友也可以绕过不看。  以我的理解来讲,其中提倡人们“向宇宙索求”的做法,并不是真的说只要我们想要什么就能得到什么,而是让我们把注意力从日常琐事中转移出来,关注我们的目标,当我们经常关注一个目标时,我们就能更容易地发现更多挺进这个目标的机会,这就是“吸引力”和“宇宙的回馈”的秘密。如果你想抓鸟,首先你要多观察鸟,然后你会逐渐发现它的习性和弱点,这样抓到鸟只是水到渠成的事了。而如果你在观察鸟的时候,总是走神去看身边的苍蝇蚊子,那么显然你的观察进度会大打折扣,你也就会在更晚些时候才有可能找到抓鸟的办法。 另一层面,这个思想让你把原本只是“想想而已”的愿望正视起来,把愿望变成欲望,我们都知道欲望能激发人们的最大潜能,然后你要将自己的欲望不断升温,使它最终熊熊燃烧,让它引燃你的无尽能量,去实现你的愿望。相反,如果你无欲无求,或者总是连想都不敢想,那一切都将是遥不可及的! 你要放开你的野心,大胆地向宇宙索要你想要的一切。欲望是第一步,也是最重要的一步。如果一个战士没有求胜的欲望,那么他未出家门时就已经败了。如果比尔·盖茨清心寡欲,那么他不会去建公司,自然也不会有微软乃至世界的今日成就。 无论你认为自己行,还是不行,你都是对的。 ——亨利·福特某兄台的中文版翻译:你说你行你就行,不行也行;你说不行就不行,行也不行。的确,回首过去,我们真真正正下决心认真去做的事,几乎没有做不到的。而我们失败的事,定是因我们没有把它当回事,或是没有抛开一切顾虑去追寻、去奋斗。 简而言之,就是“拨云见日”:抛开一切繁杂琐事,用心关注你的终极目标,你终能实现它。 ——————————————————————————————————————————————————————看完之后,我把我的桌布改造成了这样,如果你也看完了,你知道为什么吧^^:

 [/img]..
类别:未分类|阅读(28)|回复(1)|(0)阅读全文>>
 image本文将演示一种桌面程序自动更新方案,其步骤比较多,但原理非常简单,通用性尚可,对于小型应用来说,直接拿去就可以用了。 原理 服务器端的结构是这样的:image其工作原理如下:Update.asmx仅提供一个功能,就是检测是否需要更新,在需要更新的时候就返回一个更新地址,通常情况下返回的地址就是Download.ashx,而在某些特殊情况下,也可以修改服务端使之从其他Url提供更新下载。检测是否需要更新的的具体做法是:首先获取Updata目录中的主程序版本号,再获取数据库中的最新版本号,两者对比。如果相同则直接与客户端提供的版本号相对比并返回结果;如果不同则将主程序版本号写入数据库,然后生成新的更新文件包,直接向客户端返回更新地址。Download.ashx的功能仅仅是将最新版本更新文件包输出。而客户端部分包含主程序、Update.exe以及其他附属文件,更新时由主程序检测并下载更新,在主程序退出时,如有更新并已成功下载,则调用Update.exe完成解包及更新覆盖工作。需注意的是:Update.exe永远不能被更新,因为它无法更新其自身,所以服务端更新时也不要将Update.exe纳入更新包。下面就是来实际编写一个自动更新解决方案: 服务器端首先建立一个Web服务项目,项目名为“自动更新服务”:image添加一数据库,名为Database.mdf:
类别:未分类|阅读(689)|回复(3)|(1)阅读全文>>
image引言这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序。播放器普遍都要有个看起来比较酷的外观,于是我就给设计了个不规则形状的带透明边框的外观,如下图:image但这个设计整合到WPF中时,却遇到了一个头疼的BUG:只要设置窗体为AllowsTransparency="True" WindowStyle="None",内嵌的WebBrowser就无法显示了,但它还不是真的没有了,里面加载的视频还会正常播放、出声,甚至用鼠标去点网页内容还能正常交互,就是啥也看不到。 解决办法那么我是如何解决的呢?经过一系列搜索,我找到了这样的代码:前台XAML文件:http://www.google.cn/codesearch/p?hl=zh-CN#ihfHhUg5N2k/trunk/vs2010/meta/Glu/Helper/WebBrowserOverlay.xaml&q=WebBrowserOnTransparentWindow&d=5后台CS文件:http://www.google.cn/codesearch/p?hl=zh-CN#ihfHhUg5N2k/trunk/Glu/Helper/WebBrowserOverlay.xaml.cs&q=WebBrowserOnTransparentWindow&d=3使用时首先要把这两个文件原封不动的复制到项目中:image然后在你要加载WebBrowser的地方放置一个命名的Border元素:
类别:未分类|阅读(968)|回复(1)|(0)阅读全文>>