2009-07-14 37 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