2010-01-04 5 views
3

우리는 응용 프로그램에서 money 값을 나타내는 데 사용되는 사용자 정의 데이터 유형 객체 "Money"를 가지고 있습니다. 현재 우리는 Grid 구성 요소 내에서 사용자 지정 서식을 구현하려고 시도하지만 System.Convert에서 예외 "InvalidCastException"이 발생합니다.system.convert to custom object

예외 텍스트는 다음과 같습니다.

System.InvalidCastException occurred 
    Message="Invalid cast from 'System.Int32' to 'System.Money'." 
    Source="mscorlib" 
    StackTrace: at System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider) 
    InnerException: 

"Money"데이터 유형은 IConvertible을 구현하고 자체 TypeConverter를 구현합니다.

이 예외를 어떻게 극복 할 수 있습니까?

편집 :이 문제는 DevExpress XtraGrid와 관련이 있습니다. "서식 조건"은 사용자 지정 데이터 유형 "Money"에 바인딩 된 열에서 평가됩니다. 형식 조건이 컬럼에 평가되는 때 돈의 종류가 문제없이 열에 바인딩 할 수 있습니다, 그것은 단지 InvalidCastException이 제기, 즉 GridColumnValue> 0

+5

"돈"유형을 예외 텍스트가 보여주는 것처럼 "시스템"네임 스페이스에있는 것으로 정의 했습니까? –

+0

예. System.Money – Roboudy

+0

귀하의 의견 (내 게시물), 나는 당신이 질문과 태그를 업데이 트해야한다고 생각; 그 점들은이 질문에 중요합니다. 나는 그 도구에 익숙하지 않아서 자신을 편집하고 싶지 않았습니다. –

답변

2

문제가 여기 int 때문이다처럼 소리 그것에 대해 아무것도 모르는 (하지만 Moneyint로 전환 될 수 있음) 이후, 그리고 int은하지 전환 Money이다.

코드 (반사체)를 통해 살펴보면, Convert.ChangeType입니다.은이 용도를 좋아할 것입니다.

일반적으로 당신이 형식과 관련된 TypeConverter을 통해, 그것은에/string에서 주로 취급하는 기대 때문에, 당신이 사용하고 있고 int가 어디에서 오는 어떤 그리드 구성 요소를 알고에 관심이있을 것 또는 재산 (PropertyDescriptor.Converter 경유). 자신의 TypeConverter을 작성한 것 같기 때문에 ConvertFrom 구현을 보여주는 것도 가치가 있습니다.

그리드 사용 이외의 일반 C#에서 당신은 정적 변환 연산자 (implicit/explicit을)에 의해 간단하게 이렇게 정의 할 수 있어야한다.

+0

감사합니다. 구체적으로 그리드 구성 요소는 DevExpress XtraGrid입니다. 우리는 Money 데이터 유형에 바인딩 된 열을 기반으로 형식 조건을 구현하려고합니다. 예를 들어, "GridColumnPrice> 0"과 같은 표현식은 System.Convert에서 InvalidCastException을 발생시킵니다. TypeConverter 또는 IConvertible과 같이 구현중인 코드에 상관없이 Int32에서 Money 로의 변환에는 이러한 메소드가 모두 호출되지 않습니다. 우리는 정적 변환 연산자를 제 위치에 있지만 Int32는 변환을 사용하여 Money로 변환 될 수 있지만 그리드 구성 요소는 호출하지 않습니다. – Roboudy

+0

TypeConverter 구현은 문자열 변환에 Money 및 Money에 사용됩니다. Int32 형식을 검색하기 위해 코드를 변경/추가 할 때 코드는 여전히 그리드에 의해 호출되지 않습니다. – Roboudy

+0

그래서 문제가 "GridColumnPrice> 0'"인 것처럼 들립니다. 이걸 제거하면 제대로 작동합니까?XtraGrid 문서가 핵심 구성 요소가 아니기 때문에이 동작 방식을 확인해야하지만, ICMparable 을 구현할 수는 있지만 지나치게 희망적이라고 생각합니다. –