Tại sao tôi không thể sử dụng sizeof() trên các cấu trúc đơn giản?sizeof() cấu trúc không xác định. Tại sao?
ví dụ:
private struct FloatShortPair
{
public float myFloat;
public short myShort;
};
int size = sizeof(FloatShortPair); //CS0233
lỗi CS0233: 'FloatShortPair' không có một kích thước được xác định trước, do đó sizeof chỉ có thể được sử dụng trong một bối cảnh không an toàn (xem xét sử dụng System.Runtime.InteropServices.Marshal.SizeOf)
MSDN trạng thái:
Nhà điều hành sizeof chỉ có thể được sử dụng với nhiều loại có thời gian biên dịch hằng số. Nếu bạn gặp phải lỗi này, hãy đảm bảo rằng kích thước của số nhận dạng có thể được xác định tại thời gian biên dịch. Nếu không thể, hãy sử dụng SizeOf thay vì sizeof.
Hằng số thời gian trôi nổi và ngắn không biên dịch như thế nào? 8-/
Khi thông báo lỗi đề xuất sử dụng System.Runtime.InteropServices.Marshal.SizeOf. –
Câu hỏi liên quan (xin lỗi để chiếm quyền điều khiển): Nếu bạn có quyền kiểm soát tốt hơn bố cục của loại (StructLayoutAttribute với các khoảng bù rõ ràng) có làm cho nó trở thành hằng số thời gian biên dịch không? – MattDavey
@MattDavey: Không theo thông số kỹ thuật. Về cơ bản, đặc tả ngôn ngữ C# cố gắng không đưa vào các chi tiết thực hiện của những thứ như StructLayoutAttribute. –