2012-11-11 2 views
2

나는 이것에 대한 연구를 조금 해봤지만 불가능한 것처럼 보이지만 그 중 아무 것도 내 문제와 관련이 없다. 현재 Stack<object>을 가지고 여러 유형의 객체를 푸시합니다. 내가 그들을 밀어 넣기 전에 상자에 넣어 object. 그래서 그것을 받아 들인다. 개체를 원래 unboxed 형식으로 자동 언 박싱 할 수있는 방법이 있습니까?개체의 자동 언 박싱

+0

"자동"이란 무엇을 의미합니까? 코드가 없으면? 나는 그것이 불가능하다고 생각한다. –

+0

내 말은, 이런 식으로 ...'(thingy.GetType()) thingy' – jduncanator

+0

'thingy'의 'thingy' 타입은 object이므로,'Object'를' Object' – Mayank

답변

0

Automagic 방법이 없습니다.

당신은 올바른 유형으로 캐스트 특정 유형의 개체 만이 얻을 수있는 확장 메서드 OfType<OneOfTheTypes>()를 사용할 수있는이 비록에게

var objT = (T)Convert.ChangeType(obj, typeof(T));

var tuple = new Tuple<object, Type>(someObject, typeof(someObject)); 

stack.Push(tuple); 
+0

'T'가 알려지지 않았습니다. – jduncanator

+0

@jduncanator'Tuple'을'Stack' instaed에 넣고 싶을 수도 있습니다. 'Stack >'보다 더 나은 결과를 얻을 수 있습니다. – Mayank

+0

이걸 생각하고 있었지만 가정하기 전에 물어볼 것이라고 생각했습니다. 일반적인 방법이 도움이 될까요? – jduncanator

2

을 시도합니다.

오브젝트가 가지고있는 런타임 유형과 호환되는 유형의 컴파일 시간 유형을 사용하여 오브젝트를 변수로 자동 변환 할 수 없습니다.
변수 유형은 컴파일 타임 유형이고 컴파일 타임에 내용을 컴파일러가 해당 유형으로 알 수없는 경우입니다. 컴파일러는 스택의 각 객체에 실제로 어떤 런타임 유형이 있는지 알지 못합니다. 런타임 유형이 실제로 컴파일 시간 유형과 일치한다는 컴파일러 (캐스트 포함)에 대한 약속을해야합니다.

하지만 솔직히 말해서. 이런 종류의 "내가 갖고있는 유형을 확인하십시오"는 나쁜 디자인의 전형적인 냄새입니다. 유사한 유형의 객체가 있거나 다른 종류의 객체에 대해 다른 종류의 저장소를 사용하는 경우 공통 기본 클래스로 코드를 디자인하십시오.

+0

그것은 플래시 바이트 코드 파서 (flash ByteCode parser)이다. 나는 그들의 특성을 읽을 수 있도록 갑자기 튀어 나와서 원래의 유형으로 그들을 얻을 수 있어야합니다. – jduncanator

관련 문제