1
은 내가 어떻게 권투와 언 박싱 작품을 알고 있다고 생각하지만 분명히 내가하지, CIL/MSIL 권투 문제?
// the start of my Program::Main()
.maxstack 8 // Yes I know it's a large stack size for
// the given method; it's just a test program ;)
.entrypoint
ldc.i4 10
box int32
unbox int32 // Removing these two lines
box int32 // makes it run properly
call void [mscorlib]System.Console::WriteLine(object)
ret
대신 없다는 오류가 발생, 내가 제대로 컴파일하려면 무엇을 기대하기 때문 "
Invalid IL code in Program:Main(): box 0x1b000004
을."
// instruction: stack after instruction is run:
ldc.i4 10 // 10
box int32 // object(int32,10)
unbox int32 // 10
box int32 // should be object(int32,10), but instead, got an error.
내가 언 박싱 다시 권투를 제거했는데, 그것을 잘 실행 : 나의 이해에서
는 작업은 다음과 같이 갔다. 또한WriteLine
및 두 번째 복싱에 대한 호출을 제거하고 int를 남긴 다음 스택에서 int를 삭제하면 정상적으로 실행됩니다. 어떤 이상한 이유, 권투, unboxing, 다음 reboxing 오류가 발생합니다.
그래서 두 번째 복싱에서는 첫 번째 복싱과 달리 실행되는 동안 오류가 발생합니다.
'unbox'는 관리되는 포인터를 값 자체가 아닌 평가 스택으로 푸시합니다. 대신에'unbox.any'를 사용해보십시오. – Lee
네, 고쳐 주셨습니다. 당신은 당신의 코멘트에서 대답을해야합니다 :) –