다음 스 니펫에서 dict 키를 형성하는 중첩 된 튜플에 포함 된 recid를 추출하려고합니다. 중첩 된 튜플 형식은 (Int32, (부울 값, 부울 값)) -변환/변환 문제
Int32 항목의 값 (실제로는 db 레코드의 행 ID )을 찾고 있습니다.
아래의 일치 코드에서 목록에 recid를 추가하려고하지만 먼저 정수로 개체를 캐스팅하려고합니다.
하지만 다음과 같은 오류가 발생합니다. 그 이유는 확실하지 않습니다.
오류 : 유형에서이 런타임 강제 또는 형식 시험 '는
이 프로그램 지점 이전 정보를 기반으로 불확실한 유형을 포함이 int32합니다. 일부 유형에서는 런타임 유형 테스트가 허용되지 않습니다. 추가 유형 주석이 필요합니다. 여기에 참조되는 사전은 다음과 같이 정의된다 rdict
가정
// Create Dict
let rdict = new Dictionary<_,_>()
// Add elements
rdict.Add((x.["PatientID"],(true,true)),ldiff)
// Extract Dict items
let reclist = new ResizeArray<int32>()
for KeyValue(k,v) in rdict do
match k with
| ((recid,(true,true)) ->
printfn "Found a matching Record: %A " recid; // <- prints correct result
let n = (recid:?> int32) // <- coercion error
reclist.Add(n)
라인'rdict.Add ((X. "PatientID"], (참, TRUE))'개폐 괄호의 일치 수를 갖는다. Dictionary'은'의 키 값은 무엇 'int * (bool * bool)'은 키 타입 일 뿐이고'int'는 키 타입이고'bool * bool'은 값 타입입니까? 또한'x의 실제 타입은 무엇입니까? "int"또는'int' (즉,'int'로 형 변환 될 수있는'obj')를 반환합니까? – ildjarn
oops - rdict.add 행을 게시 할 때 제가 놀았습니다. - 이제 수정되었습니다. (사실 저는/dict 값으로 행/열 쌍의 목록을 작성 해요. dict 키는 실제로 복합 (제거, (부울, 부울)) 값입니다. (boolean은 rec가 쌍으로 존재하는지 여부를 정의합니다. 테이블) x. [ "PatientID"]는 db 테이블에서 검색 한 (unboxed) int 값입니다. – BrendanC
실제로 1 m ore 질문 - 동봉 된'bool' 쌍이'true, true'이고 다른 조합이 아닌 경우에만'rdict'에서'reclist'로 id를 복사하는 것이 당신의 의도입니까? – ildjarn