2012-03-07 2 views
1

json에서 WCF에 의해 deserialize 된 정수 목록이 있습니다. 이 목록은 (int32의) 목록으로 deserialize됩니다. deserialize하는 방법을 제어 할 권한이 없습니다.List of (Int32). 서로 다른 형식으로 인해 (int64 값) Contains가 작동하지 않습니다.

이 목록에 Int64 값이 포함되어 있는지 확인할 수 있어야합니다. 분명히 작동하지 않습니다. UINT64 통해

나는 각 숫자 유형에 대해 한 번,이 기능을 12 시간을 만들 필요가 싶지 않기 때문에 내가 IList의를 통과하고있어 그 이유는
Private Shared Function IsIn(aPropertyValue As Int64, aList As IList) As Boolean 
    Return aList.Contains(aPropertyValue) 
End Function 

, 바이트 : 여기에 함수의 샘플입니다. 만약 내가 12 번, acutally 가능한 모든 옵션에 대해 12 x 12 시간을 만들었다면 List (of T) .Exists()를 사용할 수있을 것 같아요.

Contains()의 설명서에는 IEquatable (Of T) .Equals를 사용하여 비교를 수행한다고 나와 있습니다. 나는 같은 값을 가진 Int32와 Int64가 비교되고 동등한 것으로 발견 될 수 있다고 생각해야한다.

분명히 뭔가 빠져 있어야합니다.

+2

을'IEquatable .Equals'에 대해 "Equals 메서드의 구현은 타입 T의 또 다른 목적은 같은 유형의 평등에 대한 테스트를 수행하기위한 것입니다 현재 개체. " 따라서 다른 유형의 값을 비교할 수 없도록되어 있습니다. 어쨌든리스트가'IList '로 직렬화 된 경우, 64 비트 값은 이미 잘 리거나 줄 바꿈되어있다. 만약 당신이 그것으로 작업하고 싶다면, 제대로 직렬화를 해줄 필요가있다. –

+0

한 줄의 코드로 함수를 작성하는 이유는 무엇입니까? 한 줄의 코드 만 사용하면됩니다. 문제 해결됨. –

+0

64 비트 값이 32 비트 범위에 있다는 것을 알고 있다고 가정하면 (예외는 예외입니까?), Convert.ToInt32()를 수행 할 수는 없습니까? 즉, aList를 반환합니다 .Contains (Convert.ToInt32 (aPropertyValue)) – kmote

답변

0

이 시도 : 문서에서

Private Function IsIn(ByVal aPropertyValue As Long, ByVal list As IList) As Boolean 
    Dim genericListType As Type = CType(list, Object).GetType().GetGenericArguments()(0) 
    Dim convertedPropertyValue As Object = Nothing 
    Try 
     convertedPropertyValue = Convert.ChangeType(aPropertyValue, genericListType) 
    Catch 
    End Try 
    If convertedPropertyValue IsNot Nothing Then 
     Return list.Contains(convertedPropertyValue) 
    Else 
     Return False 
    End If 
End Function