2009-07-14 38 views
1

我试图复制泛型类型的TryParse,并认为TypeDescriptor可能会给我以后的样子。所以我提出了下面的测试案例,但它失败了,只是想知道是否有人知道我出错的地方。使用TypeDescriptor来代替TryParse

[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块。

干杯 安东尼

+0

它失败的地方在哪里?转换器是否为空? IsValid调用是否返回false? – 2009-07-14 23:37:43

+0

IsValid始终返回true。因此此行失败“resultValue =(T)converter.ConvertFrom(value);” – 2009-07-15 00:47:26

回答

2

从MSDN文档TypeConverter.IsValid

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

因此,它只会检查值的类型,而不是值是否是可以解析的正确输入。请参阅this Connect ticket