【问题标题】:Using TypeDescriptor in place of TryParse使用 TypeDescriptor 代替 TryParse
【发布时间】:2010-11-10 20:20:57
【问题描述】:

我正在尝试为泛型类型复制 TryParse,并认为 TypeDescriptor 可能会给我我想要的东西。所以我想出了以下测试用例,但它失败了,只是想知道是否有人知道我哪里出错了。

    [TestMethod]
    public void Test()
    {
        string value = "Test";
        Guid resultValue;
        var result = this.TryConvert(value, out resultValue); 
    } 

    public bool TryConvert<T>(string value, out T resultValue)
    { 
        var converter = System.ComponentModel.TypeDescriptor.GetConverter(typeof(T));
        if (converter.IsValid(value))
        {
            resultValue = (T)converter.ConvertFrom(value);
            return true;
        }
        resultValue = default(T);
        return false;
    }

注意,我不想使用 try catch 块。

干杯 安东尼

【问题讨论】:

  • 哪里出了问题?转换器是否为空? IsValid 调用是否返回 false?
  • IsValid 始终返回 true。因此这条线失败了“resultValue = (T)converter.ConvertFrom(value);”

标签: c# .net type-conversion casting tryparse


【解决方案1】:

来自TypeConverter.IsValid 的 MSDN 文档:

IsValid 方法用于验证类型中的值,而不是确定值是否可以转换为给定类型。

所以它只会检查值的类型,而不检查值是否是可以解析的正确输入。

另见this Connect ticket

【讨论】:

  • EnumConverter、NullableConverter 和 UriTypeConverter 是唯一真正使用 IsValid 的。
猜你喜欢
  • 2023-02-21
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多