2009-07-14 6 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 catch 블록을 사용하고 싶지 않습니다. TypeConverter.IsValid위한 MSDN 문서에서

+0

어디에서 문제가 있습니까? 변환기가 null입니까? IsValid 호출이 false를 반환합니까? –

+0

IsValid는 항상 true를 반환합니다. 따라서이 줄은 "resultValue = (T) converter.ConvertFrom (value);"실패합니다. –

답변

2

건배 안토니 :

IsValid있어서 값이 소정의 형식으로 변환 할 수 있는지 결정하기보다는 유형 내의 값을 확인하는 데 사용된다.

그래서이 값은 구문 분석 할 수있는 올바른 입력인지 여부가 아닌 값의 유형 만 검사합니다.

this Connect ticket도 참조하십시오.

+1

실제로 IsValid를 사용하는 EnumConverter, NullableConverter 및 UriTypeConverter 만 있습니다. – user7116

관련 문제