代码之家  ›  专栏  ›  技术社区  ›  Brian

C#类型转换器和IsValid

  •  0
  • Brian  · 技术社区  · 16 年前

    很好,这就是为什么TypeConverter有一个IsValid()方法,对吗?我遇到了一个问题,IsValid()将返回true,但当我调用ConvertFromString()时,它会抛出一个异常。下面是一些重现问题的代码:

            System.ComponentModel.DateTimeConverter DateConversion = 
                new System.ComponentModel.DateTimeConverter();
    
            String TheNumberZero = "0";
    
            if (DateConversion.IsValid(TheNumberZero))
                Console.WriteLine(DateConversion.
                    ConvertFromString(TheNumberZero).ToString());
            else
                Console.WriteLine("Invalid.");
    

    当我运行这个时,线路

    Console.WriteLine(DateConversion.
        ConvertFromString(TheNumberZero).ToString());
    

    抛出带有消息的System.FromateException

    0 is not a valid value for DateTime.
    

    3 回复  |  直到 11 年前
        1
  •  3
  •   plinth    16 年前

    文档是您的朋友:

    IsValid方法用于验证 类型中的值 而不是 给定类型 . 例如,IsValid 类型。有关示例,请参见 枚举转换器。

    包装法 在异常块中。

        2
  •  1
  •   casperOne    15 年前

    这是ck建议的代码示例。
    通常,当您确实需要知道值类型的解析是否有效时,这就是要使用的方法。

            DateTime convertedDate;
            string zero = "0";
    
            if (!DateTime.TryParse(zero, out convertedDate))
            {
                throw new InvalidCastException(string.Format(
                    "Attempted Invalid Cast of {0} to DateTime",zero));
            }
    
        3
  •  -1
  •   cjk    16 年前