代码改变世界

随笔分类 - .Net基础

泛型使用中,解决类型转换问题

2014-12-15 20:00 by JustRun, 3290 阅读, 收藏, 编辑
摘要:遇到的问题是这样,系统中有一个字符类型的字段来存储一些通用的系统配置,虽然存储的形式是字符串,但是实际在系统中的使用类型则可能是string, bool, int, decimal.这个时候就想写一个通用的方法来获取各种不同类型的返回值,当然这个时候想到的就是使用泛型。那么这个方法的定义大概就是这样... 阅读全文

.Net中使用SendGrid Web Api发送邮件(附源码)

2014-10-18 11:03 by JustRun, 3364 阅读, 收藏, 编辑
摘要:<img src="http://images.cnblogs.com/cnblogs_com/JustRun1983/569327/o_sendgrid.png" class="desc_img"/>SendGrid是一个第三方的解决邮件发送服务的提供商,在国外使用的比较普遍。国内类似的服务是SendCloud.本文介绍如何在.Net中使用SendGrid的Restful API来发送邮件。 阅读全文

.Net Collection的一些理解——记录一次向实习生的答疑

2014-08-14 12:18 by JustRun, 2401 阅读, 收藏, 编辑
摘要:公司最近进了个实习生,每天下班前我都会花一些时间来解答一下实习生的一些疑问。今天问起了关于集合排序方法Sort的一些疑问,这让我一下回到自己刚刚入行的时候。那个时候也遇到了集合排序的问题,为发现接口IComparable和ICompare的妙处而兴奋,还在公司的内部分享会上分享了如何使用它们来排序。... 阅读全文

代替Reflection(反射)的一些方法

2014-07-08 08:00 by JustRun, 8398 阅读, 收藏, 编辑
摘要:Reflection(反射)是深入学习.Net必须掌握的技能之一。最初学Reflection的时候,的确是被惊住了,原来还可以这样。只要给你一个Assembly, 你就能获取到其中所有的类型,根据类型,你能够创建和操作对象的属性和方法,甚至是私有的。但是,每次使用Reflection,看着那些丑陋难... 阅读全文

.Net开源网络爬虫Abot介绍

2014-05-31 11:21 by JustRun, 7880 阅读, 收藏, 编辑
摘要:.Net中也有很多很多开源的爬虫工具,abot就是其中之一。Abot是一个开源的.net爬虫,速度快,易于使用和扩展。项目的地址是https://code.google.com/p/abot/对于爬取的Html,使用的分析工具是CsQuery, CsQuery可以算是.net中实现的Jquery, ... 阅读全文

理解C# 4 dynamic(4) – 让人惊艳的Clay

2014-01-22 07:27 by JustRun, 13315 阅读, 收藏, 编辑
摘要:Clay非常类似于ExpandoObject, 可以看做是ExpandoObject的加强版. 它们能够让我们在不需要定义类的情况下,就构建出我们想要的对象。Clay和ExpandoObject相比,提供了更加灵活的语法支持,让我们像写javascript代码一样写C#代码,同时还能够用于构建多层级的复杂对象。阅读目录:一、多种方式初始化对象二、构建神奇的Array三、为对象动态添加方法四、动态的实现接口五、Clay的应用背景六、Clay的Sample一,多种方式初始化对象1, 最简单的对象构建和初始化dynamic New = new ClayFactory();var person = N 阅读全文

.Net Attribute详解(上)-Attribute本质以及一个简单示例

2013-11-27 08:10 by JustRun, 7848 阅读, 收藏, 编辑
摘要:Attribute的直接翻译是属性,这和Property容易产生混淆,所以一般翻译成特性加以区分。Attribute常常的表现形式就是[AttributeName], 随意地添加在class, method的头上,然后就能够产生各种各样奇特的效果和行为。比如关于序列化的标签[Serializable]用来指定一个实体类可以序列化。[NonSerialized]可以用来指定某些属性不包含在序列化中。一, Attribute本质是什么?Attribute类似于标签, 可以为类,方法,结构体,属性,委托等贴上标签,在以后的实际执行时候,根据不同的标签做不同的处理。拿类做个比方,如果把一个类看做一个人 阅读全文

.Net中使用aliases让相同命名空间的dll引用共存

2013-11-12 18:40 by JustRun, 1422 阅读, 收藏, 编辑
摘要:有些不得已的时候,我们需要同时在代码中使用某个dll的不同版本。比如用低版本的dll中的方法导出数据,然后使用高版本的方法导入数据来实现数据的升级. 又或者需要同时使用第三方的dll不同版本。如何使它们并存于系统中是个难题。如果同时存在于系统中,会出现ambiguous refrence(有歧义的引用)的编译错误。下文介绍如何使用aliases解决这个问题。一, 构建两个不同版本的Project首先构建2个不同的Project来模拟不同版本的dll引用, 这两个project中的命名空间和类名完全相同。在MultipleVersionTest项目中同时引用这两个Project. 如下图:Hig 阅读全文

理解C# 4 dynamic(3) – DynamicObject的使用

2013-08-14 21:36 by JustRun, 6697 阅读, 收藏, 编辑
摘要:上篇文章&quot;理解C# 4 dynamic(2) – ExpandoObject的使用&quot; 了解了ExpandoObject的基本使用。但ExpandoObject的问题就是它是一个万金油,什么都可以做,但是又都不专注。使用DynamicObject正好可以解决这个问题。这篇文章介绍DynamicJson是如何继承DynamicObject,包装一个用来处理Json的动态类型。阅读目录:一、JS可以灵活处理Json字符串二、DynamicObject分析三、DynamicJson代码四、总结一,JS可以灵活处理Json字符串看下面的代码,var jsonString=&#39;{ 阅读全文

理解C# 4 dynamic(2) – ExpandoObject的使用

2013-07-23 22:35 by JustRun, 5331 阅读, 收藏, 编辑
摘要:ExpandoObject的使用非常简单,很容易入手。上一篇里面已经有详细的介绍了,可以看这里(理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用)下面对ExpandoObject的使用场合和一些认为需要注意的地方,谈一下自己的看法:一,ExpandoObject使用场合在传递对象,但是又不想创建一个class或者struct的时候,ExpandoObject就是一个非常好的选择。假如我们有一个SendMail的函数,功能是发送一个通知邮件给客户,邮件的文本模板,如下:Dear [Name],We have sent the gift 阅读全文

理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用

2013-06-30 11:32 by JustRun, 12871 阅读, 收藏, 编辑
摘要:阅读目录:一.为什么是它们三个二. 能够任意赋值的原因三. dynamic的用法四. 使用dynamic的注意事项一. 为什么是它们三个?拿这三者比较的原因是它们在使用的时候非常相似。你可以用它们声明的变量赋任何类型的值。看看下面的示例:var a = 1;object b = 1;dynamic c = 1;你还可以使用关键字为它们赋上更加复杂的类型var a = new string[]{&quot;1&quot;};object b = new string[]{&quot;1&quot;};dynamic c = new string[]{&quot;1&quot;};二. 能够任意赋 阅读全文

换个角度看委托

2013-04-21 09:02 by JustRun, 2488 阅读, 收藏, 编辑
摘要:毛主席说过长征是宣言书,长征是宣传队,长征是播种机。那么委托是什么呢?阅读目录:一、 委托是函数模板二、委托是函数指针三、委托是函数指针集合四、委托是事件通知五、委托是外部帮手六、.net中定义的丰富多彩的委托一、 委托是函数模板和类做对比, 类是对象的模板, 那么委托就是函数的模板.先看看平常我们如何定义一个classpublic class ClassA{}如上,我们使用关键字class来定义一个类.对于委托,我们使用delagate来定义:public delegate void MyDelegate(string a);我们定义了一个MyDelegate类型, 它定义的函数模板要求: 阅读全文

.net 中的WeakReference

2013-02-03 16:11 by JustRun, 577 阅读, 收藏, 编辑
摘要:我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回收对象的。我们能不能同时保持对对象的引用,而又可以让GC需要的时候回收这个对象呢?.NET中提供了WeakReference来实现。弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。阅读目录:一. 弱引用的一个简单示例二. 短弱引用和长弱引用一、弱引用的一个简单示例弱引用使用起来很简单,看下面的代码:Object obj = new Object();WeakReference wref 阅读全文

使用PrivateObject帮助单元测试

2013-01-02 13:23 by JustRun, 369 阅读, 收藏, 编辑
摘要:单元测试中,有时候需要检查一些私有变量的值时候改变,或者是否是预想的值,使用常规方法很难办到;使用反射,又会显得太麻烦。关于PrivateObject的更多使用方法,可以参考http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privateobject%28v=vs.80%29.aspxvar object = new Object();//可以替换成任何我们需要测试的类 var privateObject = new PrivateObject(object);接着就可以使用 阅读全文

在Winform,Silvelight,WPF等程序中访问Asp.net MVC web api

2012-11-08 19:53 by JustRun, 1278 阅读, 收藏, 编辑
摘要:Asp.net mvc 4中出现的web api是用来实现REST.关于什么是REST,可以看这里http://zh.wikipedia.org/zh/REST通过ajax等访问 web api非常方便,但是如何在Winform, Silverlight等访问web api呢?通过搜索,发现了已经有人做过这个东西了,就是RestSharp.http://restsharp.org/https://github.com/restsharp/RestSharpRestSharp不只是访问web api, 访问其他平台的Rest API也是一样。看看介绍的使用,无论是post数据,文件,格式化返回数 阅读全文

在Autofac中如何获取注册组件的类型

2012-10-17 22:11 by JustRun, 757 阅读, 收藏, 编辑
摘要:假如这里我注册component:builder.RegisterType&lt;DeleteOrganization&gt;().As&lt;IDeleteOrganization&gt;();后面我们想获取类型,可以这样container.Resolve&lt;IDeleteOrganization&gt;().GetType()但是这样是先实例化了DeleteOrganization对象,然后再获取Type, 但是我们并不需要实例。如何做才能更有效率呢?合理的做法是:var registration = container.ComponentRegistry .Registrations 阅读全文

Nuget挂了的解决方法

2012-10-11 14:33 by JustRun, 529 阅读, 收藏, 编辑
摘要:一点题外话,不知道老是这样搞,怎么能提高国力去要回钓鱼岛?转自: http://www.cnblogs.com/TianFang/archive/2012/10/08/2715824.html今天用Nuget下一个程序包时,发现Nuget挂了:未能解析此远程名称:&#39;nuget.org&#39;。第一反应就是方校长抖威风了,挂个代理上http://nuget.org试了下,果然好好的。用命令nslookup nuget.org试了下,域名无法解析;便用google的DNS重新解析了下nslookup nuget.org 8.8.8.8,能解析出157.56.8.150来;再用http:/ 阅读全文

什么是域(domain)

2012-10-11 08:43 by JustRun, 515 阅读, 收藏, 编辑
摘要:转自: http://www.cnblogs.com/jfzhu/archive/2012/10/11/2719285.html在今天很多人都有意识或无意识的跟域这个东西打过交道。如果你在公司里使用电脑,并且你的电脑接入了公司的局域网,那你的电脑很可能就在一个域中。如何查看你的电脑是否连接到一个域中,以Windows为例,右击我的电脑 –&gt;属性,可以看到,我现在使用的这台电脑就加入了一个域。域已经成为绝大多数公司组织、连接电脑的一种方式。那么我们究竟为什么要使用域?它能给我们带来什么好处呢?假设你是公司的系统管理员,你们公司有一千台电脑。如果你要为每台电脑设置登录帐户,设置权限(比如是否 阅读全文

理解为什么要使用Ioc

2012-10-11 06:34 by JustRun, 3956 阅读, 收藏, 编辑
摘要:转自 http://www.cnblogs.com/shanyou/archive/2010/05/28/1746711.html较复杂的应用程序都是由多个项目组织成的,项目可以划分成程序集(Assemblies)和宿主(Hosts),也就是应用程序的入口。Assemblies 通常是常见的类库项目,包括可以重用的功能和方便测试,通常包括下面的组件:Views, Controllers 和 Models服务持久类 和 repositoriesDecoratorsReusable user controls规则库业务逻辑这些项目通常不应该直接依赖于下面的组件:IoC 容器程序集;日志记录框架 ; 阅读全文

认证 (authentication) 和授权 (authorization) 的区别

2012-09-27 09:04 by JustRun, 408 阅读, 收藏, 编辑
摘要:转自 http://www.cnblogs.com/joooy/archive/2010/08/08/1795257.html以前一直分不清 authentication 和 authorization,其实很简单,举个例子来说:你要登机,你需要出示你的 passport 和 ticket,passport 是为了证明你张三确实是你张三,这就是 authentication;而机票是为了证明你张三确实买了票可以上飞机,这就是 authorization。在 computer science 领域再举个例子:你要登陆论坛,输入用户名张三,密码1234,密码正确,证明你张三确实是张三,这就是 au 阅读全文

软件版本名称的含义

2012-09-05 09:45 by JustRun, 274 阅读, 收藏, 编辑
摘要:Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测试人员使用。Beta:也是测试版,这个阶段的版本会一直加入新的功能。在Alpha版之后推出。RC:(Release Candidate)顾名思义么 ! 用在软件上就是候选版本。系统平台上就是发行候选版本。RC版不会再加入新的功能了,主要着重于除错。RTM:(Release to Manufacture)是给工厂大量压片的版本,内容跟正式版是一样的,不过RTM版也有出限制、评估版的。但是和正式版本的主要程序代码都是一样的。OEM: 是给计算机厂商随着计算机贩卖的,也就是随机版。只能随机器出货,不能零售。只能全新安装,不能从旧有 阅读全文

简明添加log4net到项目中

2012-07-08 16:24 by JustRun, 374 阅读, 收藏, 编辑
摘要:1. 非web项目中添加log4net添加log4net.dll引用到项目在配置文件中添加log4net的配置在项目的Assembly.cs文件中加上[assembly: log4net.Config.XmlConfigurator(Watch = true)]2. web网站中添加log4net前2个步骤和上面一样,不同的是需要在Global.asax中void Application_Start(object sender, EventArgs e) { // Code that runs on application startup log4net.Confi... 阅读全文

接口的显示实现和隐式实现

2012-06-30 23:02 by JustRun, 694 阅读, 收藏, 编辑
摘要:接口的实现,上学的时候就接触的概念了,现在毕业工作了,没想到自己有对接口的实现有了新的发现。基础的知识,总是在工作中不断的更新和理解的更加深刻。对于编程语言和平台中的高层建筑,总是会出现不断地变化,但是底层的基础却是一成不变的(变化很小). 所以我认为程序员应该把精力向这些基础的能力倾斜,修炼自己的内力,这样就能够在程序员这个岗位上做到做上一辈子,避开新生力量的竞争和体现自己的价值。以上是无关主题的废话, 下面是正文:一、显示实现和隐式实现。隐式实现:这是基本所有人都知道的实现方式目前常用的方式:public interface IReview{ void GetReviews();}p... 阅读全文

枚举类型转换成字符串

2012-06-22 23:27 by JustRun, 2474 阅读, 收藏, 编辑
摘要:使用枚举类型默认的ToString()方法,往往不能得到我们想要的输出的字符串。如何方便的定义枚举类型中的每个值代表的字符串输出呢?可以使用DescriptionAttribute, 写上想得到的字符串输出。enum Direction{ [Description(&quot;Rover is facing to UP (Negtive Y)&quot;)] UP = 1, [Description(&quot;Rover is facing to DOWN (Positive Y)&quot;)] DOWN = 2, [Description(&quot;Rover is facing to 阅读全文

如何定义泛型是枚举类型

2012-06-22 22:59 by JustRun, 987 阅读, 收藏, 编辑
摘要:使用泛型,可以约束这个泛型继承自那个类或者借口。但是如果我们的泛型需要的是一个枚举类型的时候,应当如何定义呢?没有直接的实现方式,只能是用下面最接近的方式实现:where T : struct, IComparable, IConvertible, IFormattable 阅读全文

Math.Round和四舍五入

2012-06-14 21:33 by JustRun, 522 阅读, 收藏, 编辑
摘要:Math.Round方法并不是像想象中的四舍五入, 可以从下面的输出结果看出来:Math.Round(3.44, 1); //Returns 3.4.Math.Round(3.45, 1); //Returns 3.4.Math.Round(3.46, 1); //Returns 3.5.Math.Round默认实际的方式是“四舍六入法”。世界上的许多国家已广泛采用“四舍六入法”。我国国家科委于1955年就作了推荐。“四舍 六入法”可以概括为:“四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一。想要达到我们平时使用的四舍五入,需要这样:Math.Round(3.4 阅读全文

关于DateTime和String转换的容易犯得错误

2012-06-08 07:59 by JustRun, 724 阅读, 收藏, 编辑
摘要:字符串转换成DateTime在开发中,常常会有DataTime类型和String类型的互相转换的要求,比较常用的写法是var date = Convert.ToDateTime(&quot;2012/06/08 09:10:10&quot;);咋一看这个代码好像没有什么问题, 实际运行也没发现问题。但是客户的机器上却是有转换的异常。后来经过调查发现,客户电脑上系统设置的CultureInfo是西班牙。这样代码会认为2012/06/08 09:10:10 不是一个合法的日期字符串。正确的写法应当是:var dtFormat = new DateTimeFormatInfo {LongDatePa 阅读全文

集合类接口IEnumerable,IEnumerator,ICollection,IList,IDictionary理解

2012-06-03 20:49 by JustRun, 542 阅读, 收藏, 编辑
摘要:IEnumerator该接口定义需要实现以下方法:Current:获取集合中的当前元素。MoveNext:将枚举数推进到集合的下一个元素。Reset: 将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。实现以上方法的类也就意味着这个集合类能够被遍历访问。IEnumerableable意味着这个类能够达到上面IEnumerator的效果, 事实上也是如此,可以从这个接口定义方法中看出来:GetEnumerator: 返回一个IEnumerator类型的值IEnumerable是集合类的基础, 它解决了集合类如何遍历的问题, 所以更高级的集合类和接口都是继承IEnumerable所有能够使 阅读全文

.net中的对象序列化(2):三种序列化方式

2012-03-25 16:38 by JustRun, 1414 阅读, 收藏, 编辑
摘要:.Net框架中提供了3中序列化的方式, 分别是:Binary SerializerSoap SerializerXML Serializer1. Binary Serializer如果需要序列化这个类的对象,那么这个类必须要标记为是可序列化的。需要用到特性 [Serializable] (作用域是Class, Struct, Enum, Delegate)如果某些变量不需要序列化, 或者不能序列化可以使用[NonSerialized], (作用域是Field)需要注意, 如果类中使用了其它的类属性,如果希望它们能序列化,那么其它的类也必须是可序列化的, 如下面类DethDisease1name 阅读全文

.net中的对象序列化(1): 序列化是什么, 以及一个简单的例子

2012-03-24 15:57 by JustRun, 898 阅读, 收藏, 编辑
摘要:1. 为什么需要序列化,什么是序列化对于一个程序来说, 使用到的对象都是存在于内存中的。如果想保存这些对象的运行时状态, 或者需要在不同进程或者网络间传递对象,就需要序列化。序列化就是讲运行中的对象状态保存为二进制或者xml等格式,从而使得对象这种&quot;虚&quot;的东西能够变&quot;实&quot;, 这样就可以把它们存储在硬盘的介质中,也可以用于网络传输。比较形象的例子是将活人冰冻起来,这个可以称为序列化, 等一天科技发达,能把这个冰冻人复活,恢复冰冻前一刻的状态,就是反序列化。计算机中用到的序列化例子有, Web service, 电脑的休眠等。2. 一个简单的例子这个例子中, 阅读全文

.Net中的Attribute

2012-03-19 22:32 by JustRun, 627 阅读, 收藏, 编辑
摘要:.Net中有Attribute和Property, 中文翻译都是属性,但是它们又非常不同。 常常把Attribute叫做特性以区分。Attribute的作用:Attribute类似于标签, 可以为类,方法,结构体,属性,委托等贴上标签,在以后的实际执行时候,根据不同的标签做不同的处理。Attribute的几个特点1. Attribute也是一个类2. Attribute类是在编译的时候被实例化的,而不是像通常的类那样在运行时候才实例化一个实际的例子, 通过Attribute控制类的行为。定义一个BlockAttribute, 指定的使用范围是类, 构造函数是一个枚举类型, 值是Yes, No. 阅读全文

编程新手学习测试题

2012-02-12 18:17 by JustRun, 244 阅读, 收藏, 编辑
摘要:1. 输入任意一个整数a, 输出所有2个整数相乘的积为a的所有组合 2. 输入任意几个数, 将这些数按照从小到大排列输出 3. 先准备一个任意的纯文本文件,预先输入任意内容,编程实现输出, 文件的大小, 创建时间, 一共有多少字符, 有多少个字母, 多少个数字, 多少个符号, 多少个空格 4. 编程实现对一个大文件(大小超过100M)的重命名, 复制, 和删除 5. 一个用户做投资, 起始资金为money, 每年的投资收益率是b(0&lt;b), 每年追加的钱为add, n年后的账户总额是多少?题目覆盖基本的语言语法, 排序, 文本文件读写, 文件操作, 递归. 阅读全文

我的开发工具箱

2012-02-12 13:53 by JustRun, 740 阅读, 收藏, 编辑
摘要:以下是我开发中用到的一些非常好的辅助工具开发相关Sqldelta一个非常好用的数据库比较和同步工具。 支持sql server 和 Oracle. 官方网址是 http://www.sqldelta.com/Lumzy一款在线界面设计应用, 非常方便。官方网址是http://lumzy.com/Gliffy一款在线的图表绘制工具,可以用来代替Visiohttp://www.gliffy.comILSpyILSpy 是开源的.NET assembly 浏览和反编译工具http://wiki.sharpdevelop.net/ilspy.ashxResharpVS的插件,能够实时的检查代码规范,自 阅读全文