2009-09-04 5 views
2

MSDN 문서에서는 값 형식 만 복싱이 필요하다고하지만이 형식은 값 형식이고 boxed 할 필요가없는 문자열에는 적용되지 않습니다. 처음에 Type.IsValueType을 시도했지만 문자열에 대해 true를 반환하기 때문에 유형을 실제로 박스에 넣어야하는지 여부를 결정하는 데 사용할 수 없습니다. 당신이 알고있는 다른 방법이 있습니까? 문자열 만 예외입니까?유형 입력란을 결정하는 방법은 무엇입니까?

업데이트 : int를 참조한 곳에서 코드를 실수로 작성했으며 문자열이라고 생각했습니다. 문자열은 사실 값 유형입니다, 사람들을 가리켜 주셔서 고마워요!

+0

문자열을 String으로 묶어야 할 필요가 없다고 생각하는 이유는 무엇입니까? –

+7

제 세상에서 'typeof (string) .IsValueType'은'false'를 반환합니다. 문자열은 클래스입니다. 그것은 Int32와 같은 구조체가 아닙니다. –

+1

@Filip : String은 클래스이며 이미 힙에 할당되어 있습니다. .NET은 문자열 데이터를 보관하기 위해 스택에서 공간을 할당하지 않습니다. – AnthonyWJones

답변

8

귀하의 전제가 정확하지 않습니다. String은 실제로 여러 시나리오에서 값 유형처럼 작동하는 참조 유형입니다. Type.IsValueType은 값을 박스로 묶어야하는지 여부를 결정하는 가장 신뢰할 수있는 방법입니다.

nullable 값으로 작업 할 경우주의해야합니다.

+0

네 말이 맞아. 나는 그것이 문자열이라고 생각하면서 int를 참조한 코드에 버그가 있음을 발견했습니다. –

1

원시 IL을 쓰고 있습니까? 그게 당신이 권투에 자신을 우려 해야하는 유일한 경우입니다.

+1

어떤 성능 중요한 코드를 한 적이 없어? –

+0

예, 저는 실제 일리노이를 쓰고 있습니다. 그래서 제가 묻고있었습니다. –

+0

헤르만을 잊지 마라. int는 i4 intrinsics이고, 종종 boxing없이 intrinsics로 작동 될 수있다. – user168785

관련 문제