我想写这样一个带参数的方法
首先传过来的值是像int? DateTime? decimal?这样的类型的
然后利用Convert.IsDBNull()判断传过来的值是否为DBNull,
如果为True,返回null并转换为相应的类型,
如果不是,则返回对应传过来的值(注意数据类型(int? DateTime? decimal?这些类型))
int? n = Convert.IsDBNull(reader["userName"]) ? (int?)null : int.Parse(reader["userName"].ToString());
上述例子是利用三元运算进行转换,而我想写这样的一个转换方法,这样就简化一点了reader["userName"]:是数据库某个字段的值字段名,利用SqlDataReader读出来的
(int?)null :   如果去掉int?,直接写null,会报错的请大家提示提示哈...

解决方案 »

  1.   

    这些类型都是值类型,也就是说不存在null,如果赋值null会报错
    加上? 可空连接符
    表示类型可以被设置为null所以去掉“?”就不能设置为null
      

  2.   

    int? n = Convert.IsDBNull(reader["userName"]) ? null : (int?)(reader["userName"].ToString());
      

  3.   

    本帖最后由 net_lover 于 2011-01-26 22:01:12 编辑
      

  4.   

    还有传过来的值可能是int?这种类型,也可能是DateTime?这种类型的
      

  5.   

    int? i= (eader["userName"]== DBNull.Value? null : Convert.ToInt32(reader["userName"]);
     
     
      

  6.   

    Method<T>(T t)
    {
    }
      

  7.   

    int? i= (reader["userName"]== DBNull.Value? null : Convert.ToInt32(reader["userName"]);
      

  8.   


    我就是想用一个泛型集合把像int? DateTime?这样的类型装起来
    但是不会写,能详细点吗?
      

  9.   

    static T GetValueOrDefault<T>(this DataRow row, string columnName) {     
    if (!row.IsNull(columnName))     
    {         
        return (T)row[columnName]   
      }     
     return default(T); 
    http://www.csharpwin.com/csharpspace/11833r1014.shtml