首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免阵列递归集(C#)

避免阵列递归集(C#)
EN

Stack Overflow用户
提问于 2018-04-23 06:20:52
回答 2查看 50关注 0票数 0
代码语言:javascript
复制
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[],我需要用valueset中做一些事情,除非我尝试创建一个新的MyClass实例,我会得到一个堆栈溢出。

当我在构造函数和set上放置一个断点时,它会显示构造函数中的myArray = new int[2] {0, 0};调用set方法,一旦set到达行myArray = value,它就再次调用set方法。这会循环一段时间,然后抛出堆栈溢出异常。我试过在作业结束后放一个return;,但是它没有到达返回的位置。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-23 06:25:09

如果您的getset有一个主体,那么您需要一个正在丢失的支持字段。

代码语言:javascript
复制
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,它被用作属性的支持字段。

票数 3
EN

Stack Overflow用户

发布于 2018-04-23 06:22:47

存在的问题是,您指向相同的内存空间:

代码语言:javascript
复制
public int[] MyArray
{
    get {return MyArray;}
    ...
}

访问属性myArray将访问属性myArray,这将导致访问相同的属性!

对此的回答是使用private variable,它只能直接从您的类中编写。public property只会访问这个变量。

如下所示:

代码语言:javascript
复制
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正式页面

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49974571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档