2013-03-30 4 views
0

다음 테스트 코드가 있는데 문제가 있습니다. 부울을 문자열로 전달할 수 있기를 원합니다. 예를 들어 "true"또는 "false"를 반환하고 bool을 반환 할 수 있습니다. 이 함수는 그냥 등 Convert.ToBoolean()를 사용할 수 있도록 다른 유형을 처리 할 수 ​​있어야합니다TypeConverter가 부울로 변환되지 않습니다

protected static T GetDefaultValue<T>(object propertyName) 
    { 
     var tc = new TypeConverter(); 

     return (T)tc.ConvertTo(propertyName, typeof(T)); 
    } 

나는이 코드 라인 위의 함수를 호출하면 예외가 발생합니다 :

bool b = GetDefaultValue<bool>("false"); 

" 'TypeConverter'에서 'System.String'을 'System.Boolean'으로 변환 할 수 없습니다."라는 메시지가 표시됩니다.

원하는 방식으로 TypeConverter를 사용하는 방법을 알 수 있습니까? 아니면이 방식으로 작동하지 않습니까?

답변

2

당신은 잠재적으로 많은 상처를 받고 있습니다. 먼저 TypeConverter가 수행 할뿐만 아니라 문자열을 부울로 변환하는 방법을 알고있는 특정 연산자를 찾아야합니다. TypeDescriptor.GetConverter()로 하나를 얻을 수 있습니다. bool에게는 문제가되지 않지만 System.ComponentModel.BooleanConventer를 얻을 수 있습니다. ConvertTo가 아닌 ConvertFrom() 메서드를 사용해야합니다. 그럼이게 잘 작동합니다 :

protected static T GetDefaultValue<T>(object propertyName) { 
     var tc = TypeDescriptor.GetConverter(typeof(T)); 
     return (T)tc.ConvertFrom(propertyName); 
    } 
    ... 
     bool b = GetDefaultValue<bool>("false"); // fine 

그러나 .NET에는 제한된 컨버터 세트 만 내장되어 있습니다. 일반적으로 속성 창에서 찾을 수있는 유형에 대한 것입니다. 사용자 지정 형식에는 TypeConverter 클래스에서 파생 된 자체 변환기가 필요합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 예외가 변환을 할 수 없다고 말했을 때 나는 미쳐 가고 있다고 생각했다. – Retrocoder

관련 문제