为了账号安全,请及时绑定邮箱和手机立即绑定

避免数组递归集(C#)

避免数组递归集(C#)

C#
qq_花开花谢_0 2021-05-04 08:24:49
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方法的任何启发都是很棒的。
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

如果你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,用作该属性的后备字段。


查看完整回答
反对 回复 2021-05-08
?
皈依舞

TA贡献1851条经验 获得超3个赞

那里的问题是您指向相同的内存空间:


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页面上找到。


查看完整回答
反对 回复 2021-05-08
  • 2 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信