[英]C# Array.Resize Passing a Ref instead of a Value
標題可能有點誤導
我有一個字符串數組。 我想參考一下。
我知道可以通過以下方式實現
public class test{
string[] content = {"abc", "abd"};
ViewContent vc = new ViewContent();
public static void Main()
{
vc.InitView(content);
}
}
public class ViewContent{
string[] contentToView;
public void InitView(ref string[] contentToShow)
{
contentToView = contentToShow;
View();
}
public void View()
{
//Do whatever with contentToView
//Example
Array.Resize<string> (ref contentToView, someInt);
}
}
如果我要調整數組的大小
Array.Resize()
引用中斷,對調整大小后的數組的任何進一步編輯都不會反映在test
類的主數組上。
我的問題是:
當需要調整大小時,如何防止對主數組的引用中斷?
另一種方式
如何在調整test
類的content
同時調整contentToView
大小?
是的,我知道使用列表會更簡單,但是我正在嘗試使用數組。
是的,我知道如果我通過test
對象而不只是數組,就可以解決我的問題。 我避免使用此方法,因為我還有其他具有字符串數組的對象。 您可能會問,如果我還有其他具有類似功能的對象,可以使用繼承並接受基類以確保可以顯示所有內容。 這是我要避免的事情。
當需要調整大小時,如何防止對主數組的引用中斷?
你不知道 您只是不使用數組。 數組對象不可調整大小,將contentToShow
的值復制到contentToView
,對contentToShow
變量的任何進一步更改都將被忽略,反之亦然。
您要的是每次test
類中的content
發生更改時, contentToView
更改其值(作為參考),反之亦然。 無法實現這一目標。 您可以使用編寫的Wrapper<T>
類引入另一種間接級別,該類基本上是這樣的:
public class Wrapper<T>
{
public T Value { get; set; }
}
如果然后同時對兩個Wrapper<string[]>
字段都進行了test.content
和ViewContent.contentToView
更改,則如果更改了test.content.Value
,則會在ViewContent.contentToView.Value
看到該更改……但我建議不ViewContent.contentToView.Value
它。
無法調整數組本身的大小。 Array.Resize
方法創建新的數組。 因此,無論如何,您的舊參考資料將不起作用。 同樣,在代碼中使用ref
關鍵字也沒有意義。 僅當您將在InitView
方法中重新分配contentToShow
,它InitView
用。 如果要“調整”數組的大小(將其重新分配給新數組),則必須使用某個類( List
或您自己的類)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.