避免数组递归集(C#)

Class MyClass

{

    public int[] MyArray

    {

        get {return MyArray;}

        set

        {

            if (value == null) { MyArray = new int[2] { 0, 0 }; return;}

            else { MyArray = value; return;}

        }

    }

    public MyClass()

    {

        this.MyArray = new int[2] { 0, 0 };

    }

}

在我的课程中,我有一个int[],我需要做valuein的事情,set除非当我尝试创建一个新的实例时,MyClass我遇到了堆栈溢出的情况。


当我在构造函数上放置一个断点,并在构造函数上set显示出断点时,myArray = new int[2] {0, 0};调用set方法,并且一旦集合行完成,myArray = value它将再次调用set方法。这循环了一段时间,然后抛出了堆栈溢出异常。我已经尝试return;在分配任务后放一个权利,但是它没有达到收益。


对数组使用set方法的任何启发都是很棒的。


qq_花开花谢_0
浏览 133回答 2
2回答

宝慕林4294392

如果你get和set有身体,你需要哪个你缺少支持字段。class MyClass{    private int[] _myArray;    public int[] MyArray    {        get {return _myArray;}        set        {            if (value == null) { _myArray = new int[2] { 0, 0 }; }            else { _myArray = value; }        }    }    public MyClass()    {        this.MyArray = new int[2] { 0, 0 };    }}在此代码中,有一个私有字段_myArray,用作该属性的后备字段。

皈依舞

那里的问题是您指向相同的内存空间:public int[] MyArray{    get {return MyArray;}    ...}访问媒体资源myArray将访问您的媒体资源myArray,这将导致您访问同一媒体资源!答案是使用private variable,只能直接从Your class编写。并且public property将仅访问此变量。像这样:class MyClass{    private int[] _myArray;    public int[] MyArray    {        get { return _myArray; }        set        {            if (value == null) { _myArray = new int[2] { 0, 0 }; return; }            else { _myArray = value; return; }        }    }}有关属性的更多详细信息,例如,可以在DotNetPerls或MS Official页面上找到。
打开App,查看更多内容
随时随地看视频慕课网APP