这种情况,你需要写一个公用的函数来转换值,public T GetValue<T>(object value, T defaultvalue = default(T))
        {
            if (value== null || value== DBNull.Value)
            {
                return defaultvalue;
            }
            return (T)result;
        }你在调用的时候只要传入相应的你要转换的类型和Object值就行了

解决方案 »

  1.   


    bj_gzrz.zxsj = Convert.ToDateTime(this.dgv.CurrentRow.Cells["zxsj"].Value == null ? 当前日期 :  this.dgv.CurrentRow.Cells["zxsj"].Value);
      

  2.   


    result需要定义?怎么调用
      

  3.   


    result需要定义?怎么调用
    不要意思,修改为:public T GetValue<T>(object value, T defaultvalue = default(T))
            {
                if (value== null || value== DBNull.Value)
                {
                    return defaultvalue;
                }
                return (T)value;
            }调用bj_gzrz.zxsj =GetValue<DateTime>(this.dgv.CurrentRow.Cells["zxsj"].Value);
      

  4.   

    或者使用bj_gzrz.zxsj =GetValue<DateTime>(this.dgv.CurrentRow.Cells["zxsj"].Value,DateTime.Now);
      

  5.   

    你要简单的话就try catch 或者写个方法处理一下
      

  6.   


    result需要定义?怎么调用
    不要意思,修改为:public T GetValue<T>(object value, T defaultvalue = default(T))
            {
                if (value== null || value== DBNull.Value)
                {
                    return defaultvalue;
                }
                return (T)value;
            }调用bj_gzrz.zxsj =GetValue<DateTime>(this.dgv.CurrentRow.Cells["zxsj"].Value);
    还是没达到效果
      

  7.   


    这种情况千万别去try,try了你的程序就别考虑性能了。
    #6楼的方法好,但是返回(T)value真的没问题?不是Convert.ToDateTime(value)??
    #6楼的方法也其实是封装了判断步骤。
      

  8.   


    result需要定义?怎么调用
    不要意思,修改为:public T GetValue<T>(object value, T defaultvalue = default(T))
            {
                if (value== null || value== DBNull.Value)
                {
                    return defaultvalue;
                }
                return (T)value;
            }调用bj_gzrz.zxsj =GetValue<DateTime>(this.dgv.CurrentRow.Cells["zxsj"].Value);
    还是没达到效果return (T)value; 改成 Convert.ToDateTime(value);
      

  9.   


    result需要定义?怎么调用
    不要意思,修改为:public T GetValue<T>(object value, T defaultvalue = default(T))
            {
                if (value== null || value== DBNull.Value)
                {
                    return defaultvalue;
                }
                return (T)value;
            }调用bj_gzrz.zxsj =GetValue<DateTime>(this.dgv.CurrentRow.Cells["zxsj"].Value);
    还是没达到效果return (T)value; 改成 Convert.ToDateTime(value);
     并非所有的代码路径都返回值
      

  10.   

    光是报错无法判断,你需要给出是在哪一步报错的,如果是因为return (T)value;报错,则需要在判断那里加一个判断public T GetValue<T>(object value, T defaultvalue = default(T))
            {
                if (value== null || value== DBNull.Value||string.IsNullOrEmpty(value.ToString()))
                {
                    return defaultvalue;
                }
                return (T)value;
            }
      

  11.   

    传递过去的值是“0001/1/1 0:00:00”,赋值给this.dateTimePicker3.Value = zxsj;肯定就会不对了
      

  12.   

    鉴于页面自动生成之后的值已经被篡改为“0001/1/1 0:00:00”,日期格式的数据,你需要自己判断一下  if (DateTime.MinValue > zxsj)
                {
                    zxsj = DateTime.Now;
                }
      

  13.   

    if (DateTime.MinValue > zxsj)
                    {
                        zxsj = DateTime.Now;
                    }
                    else
                    {
                        zxsj = DateTime.Now;
                    }
    要这样才会正常
      

  14.   


    可是我本身这个就是没有值的所以也不希望在传值过去也不要有值有办法处理吗
    只有两个办法,
    1.接收参数的地方类型使用DateTime? 可空类型
    2.判断如果没有值就不为这个属性赋值,最后判断是否等于DateTime.MinValue