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