改善您的C#程序系列(7)-初始化器
(译注:根据我个人对文章的理解,我把initializer译为:初始化器,它是指初始化语法,也就是在一个类里声明变量的同时,直接创建实例值的方法。 例:object m_o = new object();如果这段代码不在任何函数内,但在一个类里,它就是一个初始化器,而不管你是把它放在类的开始还以结尾。) 一些类经常不只一个构造函数。时间一长,就难得让它的成员变量以及构造函数进行同步了。最好的确保这样的事不会发生的方法就是:在声明就是的时间就直接初始化,而不是在每个构造函数内进行赋值。而且你应该使用初始化器语法同时...
C#中值为NULL时计算出错处理方法
static void Main(string[] args) { Nullable<int> x1 = GetNullableType();//可空结构 if (x1.HasValue)//判断是否有值,也就是是否为null { Console.WriteLine("x1有值得{0}", x1.Value); //获取value } else { Console.WriteLine("x1无值."); } int? x2 = 0; int? x3 = x1 + x2;//两个运算数据一个为null则结果为null int y1 = x3 ?? 1;//结合运算符,如果??前的数据...
删除DataGridView行:了索引1处没有值
DataGridView 用DATASOURCE绑定数据后的删除行的方法(不删除数据库中数据,只删除DataGridView ) private void btnDeleteCurrentRow_Click(object sender, EventArgs e) { List<DB.Item> list = (List<DB.Item>)dataGridView1.DataSource; List<DB.Item> selectList = new List<DB.Item>(); for (int i = dataGridView1.SelectedRows.Count - 1; i >= 0; i--) { selectList.Add((DB.Item)dataGridVi...
Linq Max函数用法
今天试着从Entity FrameWork 的DbSet中查询出ID最大的那一条记录,用原生的select语句该这样写: view plain select * from Trip.dbo.Test where SID=(select MAX(SID) from Trip.dbo.Test) 可是用Linq该怎样写呢?我们可以试着按原生的select语句来写,如: view plain TripEntities te = new TripEntities(); DbSet<Test> testSet = te.Set<Test>(); var a = testSet.Where(t => t.SID == testSet.Max(tt => tt.SID)); 或者 view plain var a = from test in te...
Linq to Entity 连接(join) Linq to Object
数据库的数据代码Linq to Entity在join前,内存中数据代码Linq to Object在join后。代码如下: view plain var entityNames = (from en in entitySet join ob in objectList on en.SID equals ob.Identity select en.Name).ToList(); 好了,编译通过,运行时抛异常了。 Only Primitive types ('Such as Int32, string, and Guid') are supported in this context 中文意思是“无法创建类型为“项目名.MyObject”的常量值。此上下文仅支持基...
Linq to EF 与Linq to Object
我们首先来看这段代码:(注意:Linq代码里是把内存中的数据代码,也就是Linq to object放在join前面,数据库的数据代码放在join后面) view plain List<MyObject> objectList = new List<MyObject>(); objectList.Add(new MyObject { Identity = 1, Name = "Jack", Age = 30 }); objectList.Add(new MyObject { Identity = 2, Name = "Sam", Age = 28 }); objectList.Add(new MyObject { Identity = 3, Name = "Lucy", Age = 23 }); EntityRepository repository = new EntityReposit...
改善您的C#程序系列(5)-值类型与引用类型
区别值类型数据和引用类型数据 值类型数据还是引用类型数据?结构还是类?什么你须要使用它们呢?这不是C++,你可以把所有类型都定义为值类型,并为它们做一个引用。这也不是Java,所有的类型都是值类型。你在创建每个类型实例时,你必须决定它们以什么样的形式存在。这是一个为了取得正确结果,必须在一开始就要面对的重要决定。(一但做也决定)你就必须一直面对这个决定给你带来的后果,因为想在后面再对它进行改动,你就不得不在很多细小的地方强行添加很多代码。当你设计一个类型时,选择struct或者class...
改善您的C#程序系列(4)-ToString()
在.Net世界里,用得最多的方法之一就是System.Object.ToStrying()了。你应该为你所有的客户写一个“通情达理”的类(译注:这里是指这个类应该对用户友好)。要么,你就迫使所用类的用户,去使用类的属性并添加一些合理的易读的说明。这个以字符串形式存在,关于你设计的类的说明,可以很容易的向你的用户显示一些关于对象的信息到:Windows Form里,Web Form里,控制台输出。这些字符说明可以用于调试。你写的任何一种类型,都应该合理的重写这个方法。当你设计更多的复杂的类型时,你应该实现应变能力更强的IFormatt...
改善您的C#程序系列(2)-readonly与const
为你的常量选择readonly而不是const 对于常量,C#里有两个不同的版本:运行时常量和编译时常量。 因为他们有不同的表现行为,所以当你使用不当时,将会损伤程序性能或者出现错误。 两害相权取其轻,当我们不得不选择一个的时候,我们宁可选择一个运行慢一点但正确的那一个,而不是运行快一点但有错误的那个。基于这个理由,你应该选择运行时常量而不是编译时常量(译注:这里隐藏的说明了编译时常量效率更高,但可能会有错误)。 编译时常量更快更直接,但在可维护性上远不及运行时常量。保留编译时常量是为了满足...
改善您的C#程序系列(1)-属性与数据成员
尽可能的使用属性(property),而不是数据成员(field)。 出于以下几点原因,请在设计类时,尽可能的使用属性,而不是成员。 1、.Net对属性的支持远远大于对成员的支持,你可以对属性进行数据绑定,设计时说明等很多数据成员不被支持的内容。看看.net里的属性面板,你会明白的。 2、数据安全性检测; 属性本质上是两个函数,只是因为C#的特殊语法,但我们可以像访问成员一样的访问它。因此我们可以在属性设计上添加更多更灵活的内容,对属性进行管理。其中对属性数据的检测是其中之一。 在对数据检测时,如果...