由於DateTime是一個結構,其成員似乎分解爲簡單的數學值,所以我不確定爲什麼在其上使用sizeof()會在問題標題中生成消息。.NET DateTime沒有預定義的大小
回答
因爲CLR只能在運行時確定的大小...的原因,這是一個「填充」(依賴於平臺)...
對於所有其他類型,包括結構情況下,sizeof運算符可以是 僅用於不安全的代碼塊。雖然可以使用Marshal.SizeOf方法,但此方法返回的值並不總是 ,與sizeof返回的值相同。 Marshal.SizeOf在封送類型後返回 大小,而sizeof返回 大小,因爲它已由公共語言運行庫分配,其中包括任何填充。
Ref。
也看到How do I check the number of bytes consumed by a structure?
完整的錯誤文本你,就是:
錯誤CS0233:「System.DateTime的」沒有預定義的大小,因此 的sizeof只能在一個使用不安全的情況下(考慮使用 System.Runtime.InteropServices.Marshal.SizeOf)
所以,如果你使用unsafe
上下文(一定要到C#項目的「公關operties」,‘生成’選項卡,並設置在一個對勾‘允許不安全的代碼’,使下面編譯)正常工作:
static void Main()
{
int s;
unsafe
{
s = sizeof(DateTime);
}
Console.WriteLine(s); // writes 8
}
隨着unsafe
關鍵字,sizeof()
將與所有enum
工種與所有struct
類型沒有引用類型的實例字段(並且DateTime
肯定是一個沒有引用類型成員的結構)。
如果沒有unsafe
關鍵字,則不能使用sizeof
。 (然而,由於C#2你被允許使用預先定義的類型,如int
和enum
類型,但不能在其他結構類似DateTime
,因爲你所看到的。)
注意,DateTime
結構是例外情況是Marshal.SizeOf<DateTime>()
(或.NET版本4.5.1(2013)之前的Marshal.SizeOf(typeof(DateTime))
)將引發異常。這是因爲不尋常的(對於struct
)結構佈局「自動」。
Alex Pinsker寫nice solution獲得DateTime
(或任何其他類型)的大小。
- 1. 「$沒有定義」上調整大小
- 2. 功能沒有定義調整大小
- 3. 打開預定義大小的窗口
- 4. 基於窗口大小的預定義
- 5. ios使用預定義大小打印
- 6. 用於具有預定義大小的數組的initializer_list
- 7. PyDev預定義的定義是否區分大小寫?
- 8. 有沒有辦法自定義UITableViewCell的backgroundView的大小?
- 9. 定義一個沒有固定大小的雙數組?
- 10. 如何在CSS中定義(過載?)預定義大小(大,x大等)?
- 11. 有沒有一種方法來定義鍵值的大小?
- 12. 如何創建用戶定義大小的矢量,但沒有預定義的值?
- 13. .NET Compact Framework:將默認大小定義爲自定義控件
- 14. 格式.NET DateTime「日」沒有前導零
- 15. 定義沒有數據的表的大小(Oracle)
- 16. C#設置沒有固定大小的數組的大小
- 17. p5調整畫布大小的問題; resizeCanvas沒有定義
- 18. 爲什麼DateTime不是預定義的類型?
- 19. C#數組沒有指定的大小
- 20. 有沒有一種方法可以預測.doc的大小?
- 21. NUnit test DateTime沒有.Net Timespan或DateTime函數
- 22. 如何更改.net中datetime選取器的彈出大小?
- 23. 加密沒有預定義庫
- 24. 定義與大小
- 25. 定義最大RelativeLayout大小
- 26. .NET中預定義例外的參考
- 27. jQuery的沒有定義 - $沒有定義
- 28. Grails不區分大小寫的URL映射預定義的URL?
- 29. 嘗試把jqGrid的成格與預定義的大小
- 30. 更改預定義的UITableViewCell設計的圖像大小「基本
msdn ...添加引用... –
感謝:-)添加了第二個參考 – Yahia
這也意味着'sizeof(DateTime)'在'unsafe'上下文中可以正常工作(請參閱我的新答案)。 –