繁体   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