簡體   English   中英

C#Array.Resize傳遞引用而不是值

[英]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.contentViewContent.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM