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的引用中断?
另一种方式
如何在调整test
类content
同时调整contentToView
大小?
是的,我知道使用列表会更简单,但我正在尝试使用数组。
是的,我知道如果我传入test
对象而不是数组,我的问题就会解决。 我正在避免使用此方法,因为我还有其他具有字符串数组的对象。 您可能会问,如果我有其他对象,它们提供类似的function,我可以使用inheritance并接受基类以确保可以显示所有内容。 这是我想避免的。
当需要resize时,如何防止对主arrays的引用中断?
你没有。 你只是不使用数组。 数组对象不可resize,并且在将contentToShow
的值复制到contentToView
,将忽略对contentToShow
变量的任何进一步更改,反之亦然。
您要问的是,每次test
类中的content
发生更改时, contentToView
更改其值(这是一个引用),反之亦然。 没有办法实现这一目标。 您可以使用您编写的Wrapper
类引入另一级别的间接,基本上如下所示:
public class Wrapper { public T Value { get; set; } }
如果你然后使test.content
和ViewContent.contentToView
两个Wrapper
字段,那么如果你改变test.content.Value
,你会看到ViewContent.contentToView.Value
中的变化…但我建议不要它。
无法调整数组本身的大小。 Array.Resize
方法创建新数组。 所以无论如何你的旧参考都行不通。 在代码中使用ref
关键字也没有意义。 仅当您在InitView
方法中重新分配contentToShow
它才有用。 如果要“调整”数组的大小(将其重新分配给新数组),则必须使用某些类( List
或您自己的类)。