VB.Net中可以用isNumeric,isDate,但C#中没有。除了正则式和 parse+异常外,还有什么好的方法吗?当然了,不要说自己写函数哦:)    另外,正则和异常判断这两种方法应该是正则式强一些的吧

解决方案 »

  1.   

    VB.NET中保留了旧函数,是为了照顾以前老VB用户,但内部实现已经变了,而且并不符合.NET面向对象的思想;应尽量用.NET Framework的方法~
      

  2.   

    使用2.0 调用TryParse()1.x
    int num = 0;
    double result;
    bool parseResult = double.TryParse("123", out result)
    if( parseResult && result<= int.MaxValue && result >= int.MinValue )
    {
    //..........
    }
    else
    {
    //..........
    }
      

  3.   

    DateTime 转换只能使用Try catch或是正则表达式了
      

  4.   

    ofei(欧卡):2.0有TryParse,可惜1.1没有啊难道只有正则或异常了吗?
    天哪,判断一个数据,居然要写一堆try catch,而且异常捕捉时速度贼慢
      

  5.   

    if(Microsoft.VisualBasic.Information.IsNumeric(this.txt.Text)==false)
      

  6.   

    cansum396(沉觉不醒) :这个实在是……太霸道了
      

  7.   

    反编译Microsoft.VisualBssic中的函数到C#:
    v1.1.4322
    public static bool IsDate(object Expression)
    {
          if (Expression != null)
          {
                if (Expression is DateTime)
                {
                      return true;
                }
                if (Expression is string)
                {
                      try
                      {
                            DateTime time1 = DateType.FromString((string) Expression);
                            return true;
                      }
                      catch (Exception)
                      {
                      }
                }
          }
          return false;
    }
    public static bool IsNumeric(object Expression)
    {
          IConvertible convertible1 = null;
          double num1;
          if (Expression is IConvertible)
          {
                convertible1 = (IConvertible) Expression;
          }
          if (convertible1 == null)
          {
                if (Expression is char[])
                {
                      Expression = new string((char[]) Expression);
                }
                else
                {
                      return false;
                }
          }
          TypeCode code1 = convertible1.GetTypeCode();
          if ((code1 != TypeCode.String) && (code1 != TypeCode.Char))
          {
                return Utils.IsNumericTypeCode(code1);
          }
          string text1 = convertible1.ToString(null);
          try
          {
                long num2;
                if (StringType.IsHexOrOctValue(text1, ref num2))
                {
                      return true;
                }
          }
          catch (Exception)
          {
                return false;
          }
          return DoubleType.TryParse(text1, ref num1);
    }  
    v2.0.50727public static bool IsDate(object Expression)
    {
          if (Expression != null)
          {
                if (Expression is DateTime)
                {
                      return true;
                }
                string text1 = Expression as string;
                if (text1 != null)
                {
                      DateTime time1;
                      return Conversions.TryParseDate(text1, ref time1);
                }
          }
          return false;

    public static bool IsNumeric(object Expression)
    {
          double num1;
          IConvertible convertible1 = Expression as IConvertible;
          if (convertible1 == null)
          {
                char[] chArray1 = Expression as char[];
                if (chArray1 != null)
                {
                      Expression = new string(chArray1);
                }
                else
                {
                      return false;
                }
          }
          TypeCode code1 = convertible1.GetTypeCode();
          if ((code1 != TypeCode.String) && (code1 != TypeCode.Char))
          {
                return Information.IsOldNumericTypeCode(code1);
          }
          string text1 = convertible1.ToString(null);
          try
          {
                long num2;
                if (Utils.IsHexOrOctValue(text1, ref num2))
                {
                      return true;
                }
          }
          catch (StackOverflowException exception1)
          {
                throw exception1;
          }
          catch (OutOfMemoryException exception2)
          {
                throw exception2;
          }
          catch (ThreadAbortException exception3)
          {
                throw exception3;
          }
          catch (Exception)
          {
                return false;
          }
          return DoubleType.TryParse(text1, ref num1);
    }
      

  8.   

    有错字
    Microsoft.VisualBssic => Microsoft.VisualBasic
      

  9.   

    1.1中用异常
    2.0中用TryParseDate我觉得还是foreach遍历,自己分析比较好
    日期主要是分析日是否超过月最大天数
    数字更简单,Char.IsDigit判断就可以了
      

  10.   

    viena(维也纳nn木人 [IQ=50,EQ<0]) 的东东强