expDate变量生明为了DateTime类型,这是个结构,结构是不能用null来引用的如何判断,要看你上下文的代码,你的该类型的数据从何处而来?

解决方案 »

  1.   

    if (expDate!=System.DataTime.MinValue)
    {
      return false;
    }
      

  2.   

    if (expDate!=System.DataTime.MinValue)
    {
      return false;
    }
      

  3.   

    是 个 WebService ,有个Datetime输入参数 ,如果直接点击 调用 而不输入值 报错:System.ArgumentException: Cannot convert  to System.DateTime.
    Parameter name: type ---> System.FormatException: String was not recognized as a valid DateTime.
       at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles
      

  4.   

    try
    {
      Convert.ToDateTime(expDate);
    }
    catch
    {
      expDate = DateTime.Now;
    }
      

  5.   

    好象datetime 值的默认值是所有的都是1,只要判断是不是就知道是否有值返回了
      

  6.   

    这里又开了帖???DateTime是没有默认值的,你一定要为它赋初值。
    涉及DateTime的传递,我全部是用String来实现的(要格式化)如果参数表中一定要用到DateTime类型,那么请重载此方法
    public void A(String strIN)
    {
      .......
    }
    public void A(String strIN,DateTime dateIN)

      .......
    }BTW,对于此类型我也有个疑惑的地方。大家可以试一下,在DataSet中的DateTime类型的字段是可以为DBNull.Value的。记得不是很清,是做上上上个项目时发现的(1.0 Framework下时)现在我用1.1    :)
      

  7.   

    WebMethod如果使用DateTime作为参数传递,是一定要传值的,系统会把字符串的值Parse为DateTime,而DateTime是结构类型,不能赋为Null,这是正常的如果WebMethod采用DateTime作为参数传递,那么客户端代码如果是C#写,那么编译的时候就会保证不会传递Null值,如果是其他非.Net语言调用WebMethod,那么必须传递该值另一种解决方案是用字符串接受,然后自己Parse,字符串可以赋为Null,不过也没有必要需要提醒楼主一点,不要把异常看作是洪水猛兽,正确处理之即可To qimini(循序渐进):
    DataSet当中的数据是以object类型保存,值类型(包括结构类型)会进行Boxing操作,所以可以赋为DBNull.Value,DataSet当中保存的ColumnType会在数据更新的时候进行检查,这和编译时的类型检查不同
      

  8.   

    TO  timmy3310(Tim) :解释很合理,其实我也想到了这一层。但我总觉得这是一个设计上的缺陷,DateTime应该象
    其他值类型一样有个初始值的(MinValue?1-1-1)。以避免歧义.......逼得我不得不用String来传递日期格式的参数或者搞’曲线救国‘用重载来解决还有上次的那个typeof和GetType的说法,也是勉强,总觉得是设计时的bug。既然我已经添加引用了,那么也就是知道版本和路径了,为什么一定要指定那些信息----呵呵,有些钻牛角尖了当然你的解释是相当精彩的~~~~~~~绕梁三日啊!!!
      

  9.   

    曲线救国 是 ?为什么 加了 try catch后 客户端可以 捕获异常 ,在asmx 中不输入值 却报错而不能捕获?
      

  10.   

    像这类没有 null 的变量,我一般是用 try catch 来处理的。
      

  11.   

    就是重载
    客户端可以这样调用
    Validate("AAA");
    也可以这样调用
    Validate("AAA",new DateTime(1900,1,1));更详细的请见原帖,另外建议将此帖加入FAQ
      

  12.   

    曲线救国 是 ?为什么 加了 try catch后 客户端可以 捕获异常 ,在asmx 中不输入值 却报错而不能捕获?
      

  13.   

    假如是这样定义的:
    [WebMethod]
    public DateTime test(DateTime i) {
    return i;
    }可以改成这样试试
    [WebMethod]
    public DateTime test(String i) {
        try{
    return DateTime.Parse(i);
        }catch(Exception e){
             return DateTime.MinValue
        }
    }
      

  14.   

    假如是这样定义的:
    [WebMethod]
    public DateTime test(DateTime i) {
    return i;
    }可以改成这样试试
    [WebMethod]
    public DateTime test(String i) {
        try{
    return DateTime.Parse(i);
        }catch(Exception e){
             return DateTime.MinValue;
        }
    }
      

  15.   

    不知道斑竹发现堆栈没有:
    System.ArgumentException: Cannot convert  to System.DateTime.
    Parameter name: type ---> System.FormatException: String was not recognized as a valid DateTime.
       at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
       at System.DateTime.Parse(String s, IFormatProvider provider, DateTimeStyles styles)
       at System.DateTime.Parse(String s, IFormatProvider provider)
       at System.Convert.ToDateTime(String value, IFormatProvider provider)
       at System.String.System.IConvertible.ToDateTime(IFormatProvider provider)
       at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
       at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
       --- End of inner exception stack trace ---
       at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
       at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
       at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
       at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
       at System.Web.Services.Protocols.WebServiceHandler.Invoke()
       at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()在这个堆栈里可以看出,出错是在System.Web.Services.Protocols.WebServiceHandler.Invoke这个方法里,也就是说这个错误只有在客户端catch,但是在客户端catch是不能从根本上解决问题的。web方法在调用前传入的参数都是String类型,在Invoke方法里会检测这些参数与本身要调用的webservice方法的参数是否一致,如果不同,调用Convert里提供的ChangeType将参数转换到需要的类型对象。所以如果不能转换的话,就会出异常。从String到DateTime用的是Parse方法,所以才会报那样的错。因此,斑竹如果要避免这个错误出现的话,最好将webservice方法的参数由原来的DateTime改成String,然后在这个方法里调用Parse方法来转换,并且catch这个异常,如果错误的话,斑竹就可以进行自己的处理了。