摘要:我们做软件交互界面时经常会对输入进行验证,ErrorProvider是验证winform界面输入的控件,主要步骤是:(一)添加ErrorProvider组件给Form窗口添加一个ErrorProvider组件,设置属性:ContainerControl,设置需验证的窗口Form。(二)需验证的控件绑定点击Databindings->Advanced,设置数据源更新模式:OnpropertyChanged和Onvalidation,其中OnpropertyChanged为绑定类属性,通过给属性赋值来验证,如下: public int TrainCountOfAnHour ...
阅读全文
摘要:WCF 是用于构建面向服务的应用程序的框架,服务即一组API,宿主程序(可以使应用程序,也可也是IIS)公开一组API给客户程序调用,WCF主要有三个步骤: 一、创建服务协定 创建基本 WCF 服务时,第一项任务是定义协定。协定指定服务支持的操作。可以将操作视为一个 Web 服务方法。通过定义 C++、C# 或 VB 接口可创建协定。接口中的每个方法都对应于特定的服务操作,每个接口都必须应用ServiceContract属性,接口中的每个操作必须应用OperationContract属性。新建一个dll,首先应引用System.ServiceModel.dll,它包含了ServiceCont.
阅读全文
摘要:论坛里有许多插件开发的文章,本文就不长篇大论了,说一下我的简单思路:1、建一个IPlugin接口,每个插件都要继承这个接口。2、建一个插件管理类,利用Unity来管理各个插件。 1 using System.Reflection; 2 using Microsoft.Practices.Unity; 3 public interface IPlugin 4 { 5 void LoadPlugin(); 6 string PluginName { get; } 7 } 8 public class PlugInMa...
阅读全文
摘要:http://www.mongodb.org/display/DOCS/CSharp+Language+Centerhttp://json.codeplex.com/
阅读全文
摘要:一些无法序列化的字段(比如这个字段的类型没有标记为Serializable),则可以对其继承ISerializable接口,通过这个接口的public void GetObjectData(SerializationInfo info, StreamingContext context)来自定义序列化过程,通过构造一个包含SerializationInfo info, StreamingContext context这两个参数的构造函数来反序列化。 public class CMatrix:Matrix<complex>,ISerializable { pr...
阅读全文
摘要:这两天写了一个ILNumberics的包装类,涉及到序列化时,遇到一个ILArray<T>不能使用Json.net类库序列化的问题,折腾了半天,终于搞定了,把这个经验给大家分享一下: 1、序列化的类经常需要一个默认的不带参数的构造函数; 2、不能序列化的字段用Json.Net支持序列化回调方法,通过一个过渡的字段来代替它来序列化,通过序列化回调方法绑定这两个字段。举例如下: 1 [Serializable] 2 public abstract class Matrix<T> 3 { 4 #region 属性 5 protect...
阅读全文
摘要:今天在codeplex网发现了一个比较好用的.net数学开源库,线性代数部分比较全面。http://mathnetnumerics.codeplex.com/,http://science.codeplex.com/,http://pytools.codeplex.com/;http://osl.iu.edu/research/mtl/,http://ilnumerics.net/
阅读全文
摘要:c#调用F#自定义的库,可能会经常遇到F#函数采用了Lambda作为函数参数,在C#中lambda参数被生成了FSharpFunc<T1, TResult>>> 对象,不能直接用C#中的lambda表达式作为实参来调用,我们只有通过把lambda表达式转换为FSharpFunc<T1, TResult>>> 对象,以下就是把lambd表达式转换为FSharpFunc对象的方法:using System;using System.Collections.Generic;using System.Linq;using System.Text;usin
阅读全文
摘要:泛型T不能直接进行+,-,*,/等运算符运算,可以先把操作数转换为dynamic ,在进行计算,完了了在转换回去。这种方法速度特别慢,特别是大量运算时,一般接收不了,我们把类做成泛型,一般希望做成以后经常用的库,性能肯定是有要求的。1 public T Add(T a, T b)2 {3 dynamic da = a;4 dynamic db = b;5 return (T)(da + db);6 } 后来想到了采用委托+Lambda,这种方法复杂,在不失灵活性的情况下,性能比采用dynamic效率高很多,委托定义一般利用System.Func,委托实例采用Lambda表达式,这种方式特别简.
阅读全文
摘要:“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,或者可以这么说吧,就是在函数里面定义函数,这在集合类型和linq里面很有用,比如List<T>.Sort函数里的比较器,用Lambda 表达式就非常简洁,举例如下:public class Person{ public int Id { get; set; } public string Name { get; set; } public override string ToString() { return Id.ToString() + "," + Name; } } Lambda表达式作为比较
阅读全文
摘要:今天用Linq给数据表批量添加数据时,发现速度确实比ADO.net慢了不少,后面调出DataContext.Log记录一看,发现是一行一个命令添加数据,那速度当然慢了了,差不多慢了20倍左右,Linq的本质就是通过映射类等把c#等.net语言解释为SQL语句,我按照这个思路自己把程序语言解释为SQL,听说可以使用System.Linq.Expression里面的方法解释成SQL语句,但是我看了网上的代码,看不太明白,我就按自己想法封装了一个Insert方法,速度接近ADO.net有不对的请指正。
阅读全文
摘要:这几天刚学习了Linq,觉得非常好用,比起ADO.net来,写出来的代码非常简洁,也不易出错,很多工作都微软都给封装好了,我把这几天学习心得写出来给大家分享,请各位指点,我先写个例子,具体后续再展开来说。
阅读全文