C#Array.Resize传递Ref而不是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 (ref contentToView, someInt); } } 

如果我要调整数组的大小

 Array.Resize() 

参考中断和对resize的数组的任何进一步编辑不会从test类反映在主数组上。

我的问题是:
当需要resize时,如何防止对主arrays的引用中断?
另一种方式
如何在调整testcontent同时调整contentToView大小?

是的,我知道使用列表会更简单,但我正在尝试使用数组。

是的,我知道如果我传入test对象而不是数组,我的问题就会解决。 我正在避免使用此方法,因为我还有其他具有字符串数组的对象。 您可能会问,如果我有其他对象,它们提供类似的function,我可以使用inheritance并接受基类以确保可以显示所有内容。 这是我想避免的。

当需要resize时,如何防止对主arrays的引用中断?

你没有。 你只是不使用数组。 数组对象不可resize,并且在将contentToShow的值复制到contentToView ,将忽略对contentToShow变量的任何进一步更改,反之亦然。

您要问的是,每次test类中的content发生更改时, contentToView更改其值(这是一个引用),反之亦然。 没有办法实现这一目标。 您可以使用您编写的Wrapper类引入另一级别的间接,基本上如下所示:

 public class Wrapper { public T Value { get; set; } } 

如果你然后使test.contentViewContent.contentToView两个Wrapper字段,那么如果你改变test.content.Value ,你会看到ViewContent.contentToView.Value中的变化…但我建议不要它。

无法调整数组本身的大小。 Array.Resize方法创建新数组。 所以无论如何你的旧参考都行不通。 在代码中使用ref关键字也没有意义。 仅当您在InitView方法中重新分配contentToShow它才有用。 如果要“调整”数组的大小(将其重新分配给新数组),则必须使用某些类( List或您自己的类)。