2013-03-04 4 views
0

System.ComponentModel.BooleanConverter의 기능을 확장하여 단지 truefalse이 아닌 여러 옵션을 허용하는 매우 간단한 시나리오가 있습니다.사용자 정의 TypeConverter 구현

예를 들어 yes, 1, on 등과 같은 값은 true과 같습니다.

나는 내 가정은 내가 내 정의 된 값 중 하나를 통과하면 IsValid(string)에 대한 호출이 true를 반환해야합니다 모든 내 특정 값의 컬렉션을 반환하지만 경우이가하는 것, 빠른 테스트를 수행 할 GetStandardValues() 방법을 재정의하는 시도 이 사건은 아닌 것처럼 보입니다. 이 작업을 수행하기 위해 전체 구현/재정의해야합니까?

정말 필요한 것은 IsValid() 기능이므로 가치가 있는지 궁금합니다. 또는 처음에는 TypeDescriptors을 사용하는 것보다 더 좋은 옵션이 있습니까?

답변

2

"IsValid 기능 만 필요하다면"그냥 무시해도 충분합니다. 그러나 실제로는 CanConvertFrom(Type)은 유형을 변환 할 수 있는지 테스트하려는 경우 실제로 오버라이드해야하는 메소드입니다. 이 메서드는 일부 인프라 클래스에서 사용되며이 경우에 IsValid을 재정의하는 것만으로는 충분하지 않을 수 있습니다.

부울 변환기의 경우도 ConvertFrom(object)을 무시하고 값을 사용하지 않으려면 null을 반환해야합니다. 그렇지 않은 경우 IsValid (CanConvertFrom) 호출은 실패 할 수 있습니다.

+0

답장 Nikola에게 감사드립니다. 몇 가지 테스트를 거친 후 이것이 내 문제를 해결하는 좋은 방법이 아니라는 것을 발견했습니다. IsValid를 사용하여 이와 같은 문자열 값을 테스트하는 것은 내 설계상의 좋은 결정이 아닙니다. 배후에서 일어나는 일은 .NET이 System.FormatException을 던졌습니다. 너무 많이 사용하면 여분의 스택 오버 헤드가 많이 발생합니다. – snappymcsnap