using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; /* 可空数据类型 * C#中值类型(int, Guid, bool等)是不可以为空的,int i=null是错误的,因此int, bool等这些类型不能表示数据库中的"Null" * 因此C#提供了"可空类型"这种语法,只要在类型后加?就构成了可空的数据库类型,比如int?, bool?,这样int? i = null就可以了,解决数据库中int可以为null,而C#中int不能为null的问题 * * 判断可空类型是否为空,i==null或者i.HasValue; 得到可空变量的值,int i1 = (int)i.Value或者int i i1 = i.value; * * 类型转换: 不可空类型赋值给可空类型无需要显示转换(一定成功),可空类型赋值给不可空类型则需要显示转换(不一定成功) * * * * * * */ namespace _19可空数据类型 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string s1 = null; //int i1 = null; int? i2 = 0; int? i3 = 3; //int?->可空的int,解决数据库和C#对于int是否可以为null的不同所设置的 if (i3 == null) { MessageBox.Show("i3为空"); } else { i3++; int i4 = (int)i3; //这里对可为空的i3进行数据类型转换 MessageBox.Show("i3不为空,i3++="+i3); } //第二种判断是否为空的值 if (i3.HasValue) { int i4 = i3.Value; MessageBox.Show("i3不为空,值为" + i4); } else { MessageBox.Show("i3为空"); } int i6 = 10; //定义一个int数据类型 int? i5 = i6; //可以给赋值给一个可空的int数据类型 //但可空的int型,不能赋值给一个可空的int类,这只能做数据类型转换, } private void button2_Click(object sender, EventArgs e) { //这里直接用一个强类型的DataSet /*T_UserRow u = new T_UserRow(); u.Id = 1; u.name = "xxdxxd"; u.password = "xxdxxd"; u.errortimes = 1;*/ } } }