2011-12-07 32 views
2

如何在外部方法中更改結構體?在方法中更改結構體

public void ChangeStruct (MyStruct myStruct) { 
    myStruct.field1 = 10; 
    return; 
} 

當我將結構傳遞給ChangeStruct方法後,我希望myStruct被更改。

+0

有沒有什麼特別的原因讓你在這種情況下使用'struct'? – Gabe

+1

漂亮請不要創建可變的結構。 – svick

回答

8

您需要使用ref keyword傳遞到結構的參考,而不是一個副本:

public void ChangeStruct (ref MyStruct myStruct) 
{ 
    myStruct.field1 = 10; 
} 

ChangeStruct(ref someStruct); 

您當前密碼輸入方法之前創建的結構的完整位對位的拷貝,它是這個複製你正在修改,ref關鍵字強制調用者傳遞引用(託管指針)到結構而不是副本。

+0

我被說服了,這個問題已經被問到,但找不到重複。無論如何,答案很簡單... –

5

您可以使用ref關鍵字來觀察對結構的更改,但在宏程序中,如果您只是簡單地使用一個類,那麼您將處於一個受傷較少的世界。

有關何時使用或不使用結構的想法,您可能需要consult this link。一個快速的片斷,你可能會發現有用:

不要定義一個結構,除非類型有以下所有特點:

  • 它在邏輯上表示單個值,類似於原始類型 (整數,雙精度等等)。
  • 它的實例大小小於16 字節。
  • 它是不可變的。
  • 它不會經常被裝箱。