2009-07-14 5 views
1

TryParseをジェネリック型にレプリケートしようとしていて、TypeDescriptorが私に何を与えているかもしれないと考えました。だから私は次のテストケースを思いついたが、それは失敗している、誰かが私が間違っていることを知っているかどうか疑問に思う。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 try catchブロックは使用しません。 TypeConverter.IsValidためのMSDNドキュメントから

+0

どこが失敗していますか?コンバーターはヌルですか? IsValid呼び出しがfalseを返していますか? –

+0

IsValidは常にtrueを返します。したがって、この行は "resultValue =(T)converter.ConvertFrom(value);"に失敗します。 –

答えて

2

乾杯 アンソニー:

IsValid方法は、値が指定された型に変換することができるかどうかを決定するのではなく、型内の値を検証するために使用されます。

このように、値が正しく解析されるかどうかではなく、値のタイプのみがチェックされます。

this Connect ticketも参照してください。

+1

実際にIsValidを使用するのは、EnumConverter、NullableConverter、およびUriTypeConverterだけです。 – user7116

関連する問題