首页 > 代码库 > 在C#中使用Nullable类型和 tuple类

在C#中使用Nullable类型和 tuple类

在C#1.x的版本中,一个值类型变量是不可以被赋予null值的,否则会产生异常。在C#2.0中,微软提供了Nullable类型,允许用它定义包含null值(即空值)的数据类型,这对处理数据库中包含可选字段以及很多方面都有很大帮助。

例如你不能把一个int或bool变量设置成null

bool b = null; //以下程序编译时会出现错误信息  
int i = null;  
DateTime date = null;  

但是有时候我们使用的变量不一定有值怎么办? 这时候就可以用Nullable type。只要在声明变量时候在型态后面加一个问号,此变量就变成可以被设成null的Nullable type。

bool? nullableBool = null;  
int? nullableInt = null;  
DateTime? nullableDate = null; 

一般的变量可以自动转换成nullable type:

int i = 5566;  
int? j = i;  //这个是正确的

如果要把nullable type转换成一般变量,就需要强制转换:

int? i = 5566;  
int j = (int)i; 

当一个变量是nullable type时,会自动多一个HasValue的特性。可以用来判断变量是不是null。如果是null的话HasValue会是false。反之有值不是null的话,就会是true。

 

tuple

c#4.0中增加的一个新特性,元组Tuple,它是一种固定成员的泛型集合:

用法非常简单方便,普通的方式我们可能需要这样:

public class A{ 

 public int ID{get;set;} 

 public string Name{get;set;}

}

A a=new A(){ID=1001,Name=‘CodeL‘};

Console.WriteLine(a.Name);


而使用Tuple我们只需要这样:

Tuple<int,string> a=new Tuple<int,string>(1001,‘CodeL‘);

Console.WriteLine(a.Item2);//Item1 代表第一个,Item2代表第二个


这样我们就可以不用为了 一些简单的结构或对象而去新建一个类了。
注意的是tuple最多支持8个成员,注意第8个成员很特殊,如果有8个成员,第8个必须是嵌套的tuple类型。

列如:Tuple<string, int, int, int, int, int, int, Tuple<int, int, int>>  红色部分是第8个。

第8个元素使用方法:对象.Rest.Item1,对象.Rest.Item2

 

public List<Tuple<int,string,DateTime>> GetUsers(){ 

 string sql="select ID,Name,CreateTime from Tbl_Users";

using (SqlDataReader r = SqlHelper.ExecuteReader(Connections.AdminDBConString, CommandType.Text, sql))   

 {             

        List<Tuple<int,string,DateTime>> list = new List<Tuple<int,string,DateTime>>(); 

              while (r.Read()) 

              { 

                  Tuple<int,string,DateTime> t = new Tuple<int,string,DateTime>(Convert.ToInt32(r[0]),r[1].ToString(),Convert.ToDatetime(r[2])); 

                  list.Add(t);

                } 

              return list; 

          }

}

  使用如下

List<Tuple<int,string,datetime>> list=GetUsers();

foreach(Tuple<int,string,datetime> t in list)

{ 

 Console.write(t.Item1);//ID 

 Console.write(t.Item2);//Name

   Console.write(t.Item3);//CreateTime

}

  

 

在C#中使用Nullable类型和 tuple类