간단한 구조체에서 sizeof()를 사용할 수없는 이유는 무엇입니까?sizeof() 구조를 알 수 없습니다. 왜?
예 :
private struct FloatShortPair
{
public float myFloat;
public short myShort;
};
int size = sizeof(FloatShortPair); //CS0233
오류 CS0233 : 'FloatShortPair'는 미리 정의 된 크기를 가지고 있지 않습니다 따라서는 sizeof는 안전하지 않은 상황에서 사용할 수있다 (System.Runtime.InteropServices.Marshal.SizeOf 사용을 고려)
MSDN 상태 :
sizeof의 운영자은 컴파일 시간있습니다 유형에 사용할 수 있습니다상수. 이 오류가 발생하면 의 크기를 컴파일 타임에 확인할 수 있는지 확인하십시오. 그럴 수 없다면, 은 sizeof 대신 SizeOf를 사용합니다.
float 및 short는 컴파일시 정수가 아닌데 어떻게됩니까? short
및 float
의 8/
오류 메시지에서 알 수 있듯이 System.Runtime.InteropServices.Marshal.SizeOf를 사용하십시오. –
관련 질문 (하이재킹) : 형식의 레이아웃 (명시 적 오프셋이있는 StructLayoutAttribute)을보다 세밀하게 제어하면 컴파일 시갂 상수가됩니까? – MattDavey
@MattDavey : 사양에 맞지 않습니다. 기본적으로 C# 언어 사양은 StructLayoutAttribute와 같은 구현 세부 정보를 얻지 않으려 고합니다. –