如何在外部方法中更改結構體?在方法中更改結構體
public void ChangeStruct (MyStruct myStruct) {
myStruct.field1 = 10;
return;
}
當我將結構傳遞給ChangeStruct方法後,我希望myStruct被更改。
如何在外部方法中更改結構體?在方法中更改結構體
public void ChangeStruct (MyStruct myStruct) {
myStruct.field1 = 10;
return;
}
當我將結構傳遞給ChangeStruct方法後,我希望myStruct被更改。
您需要使用ref
keyword傳遞到結構的參考,而不是一個副本:
public void ChangeStruct (ref MyStruct myStruct)
{
myStruct.field1 = 10;
}
ChangeStruct(ref someStruct);
您當前密碼輸入方法之前創建的結構的完整位對位的拷貝,它是這個複製你正在修改,ref關鍵字強制調用者傳遞引用(託管指針)到結構而不是副本。
我被說服了,這個問題已經被問到,但找不到重複。無論如何,答案很簡單... –
您可以使用ref
關鍵字來觀察對結構的更改,但在宏程序中,如果您只是簡單地使用一個類,那麼您將處於一個受傷較少的世界。
有關何時使用或不使用結構的想法,您可能需要consult this link。一個快速的片斷,你可能會發現有用:
不要定義一個結構,除非類型有以下所有特點:
- 它在邏輯上表示單個值,類似於原始類型 (整數,雙精度等等)。
- 它的實例大小小於16 字節。
- 它是不可變的。
- 它不會經常被裝箱。
結構是值類型,您必須使用ref關鍵字來防止複製。不建議使用ref和out,請參閱When is using the C# ref keyword ever a good idea?。
有沒有什麼特別的原因讓你在這種情況下使用'struct'? – Gabe
漂亮請不要創建可變的結構。 – svick