标题可能有点误导
我有一个字符串数组。我希望通过参考传递。
我知道这可以通过
完成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
类的主数组上。
我的问题是:
当需要调整大小时,如何防止对主阵列的引用中断?
的改写
如何在contentToView
课程中调整content
的大小时调整test
的大小?
是的,我知道使用列表会更简单,但我正在尝试使用数组。
是的,我知道如果我传入test
对象而不仅仅是一个数组,我的问题就会解决。我正在避免使用此方法,因为我还有其他具有字符串数组的对象。您可能会问,如果我有其他对象,它们提供类似的功能,我可以使用继承并接受基类以确保可以显示所有内容。这是我想避免的。
答案 0 :(得分:2)
当需要调整大小时,如何防止对主阵列的引用中断?
你没有。你只是不使用数组。数组对象不可调整大小,并且在将contentToShow
的值复制到contentToView
后,对contentToShow
变量的任何进一步更改都将被忽略,同样也会相反。
您要求contentToView
每次content
班级test
更改时,Wrapper<T>
更改其值(此为参考),反之亦然。没有办法实现这一目标。您可以使用您编写的public class Wrapper<T>
{
public T Value { get; set; }
}
类引入另一级别的间接,基本上如下所示:
test.content
如果您随后ViewContent.contentToView
和Wrapper<string[]>
两个test.content.Value
字段,那么如果您更改ViewContent.contentToView.Value
,则会在(function(){
var foo = {
name: 'bob'
};
console.log(foo.name); // bob
})();
console.log(foo.name); // Reference error
中看到更改。但我会反对它。
答案 1 :(得分:2)
无法调整数组本身的大小。 Array.Resize
方法创建新数组。所以无论如何你的旧参考都行不通。在代码中使用ref
关键字也没有任何意义。仅当您在contentToShow
方法内重新分配InitView
时,它才有用。你必须使用一些类(List
或你自己的类),如果你想&#34;调整大小&#34;你的数组(将它重新分配给新数组)。