2010-09-20 103 views
4

任何人都可以提供一個示例如何在運行時創建結構實例嗎?我正在使用的結構沒有定義任何構造函數,只是字段。 GetConstructor()方法返回null,到目前爲止我無法找到實現此目的的方法。在運行時C#結構實例化

回答

6

只需使用Activator.CreateInstance(Type)

大多數結構實際上並沒有無參數的構造函數 - 使用了不同形式的IL(initobj指令IIRC)。另一方面,如果一個結構體沒有構造函數,則表明它不是非常有用或者是可變的 - 而且可變結構體可能會導致各種問題。如果你自己在控制結構代碼,我會建議給它一個構造函數並使其不可變。有可能的情況下,可變結構是一個必要的邪惡(特別是在互操作性),但如果可能的話,他們是值得避免的。

+0

謝謝。我聽說有時會產生混淆的可變結構,但從來不知道何時以及爲什麼出現這樣的問題。猜猜它的時間來找出答案。 – 2010-09-20 12:56:46

+0

@ L.E.O .:這就像獲取一個值,然後在該值內改變一個字段,並且它不會反映到您從中獲取它的原始位置。各種奇怪的效果,基本上。 – 2010-09-20 12:58:02