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;*/
}
}
}