具有硬编码的getter和setter的C#属性

jda*_*vis 5 .net c#

我有一个属性定义为......

public List<Obj> Objs { get; set; }
Run Code Online (Sandbox Code Playgroud)

我希望能够做的是在get方法中加入一些逻辑,所以它看起来像......

public List<Obj> Objs
{
    get
    {
        if (Objs == null)
        {
            Objs = new List<Obj>();
        }
        if (Objs.Count < 1)
        {
            Objs.Add(new Obj());
        }
        return Objs;
    }
    set { Objs = value; }
} 
Run Code Online (Sandbox Code Playgroud)

现在,当我这样做时,我收到一个错误,告诉我函数在所有路径上都是递归的.

有没有办法在不创建私有支持字段的情况下执行此操作?

Jea*_*erc 12

必须建立一个私人领域:

    private List<Obj> _objs;
    public List<Obj> Objs
    {
        get
        {
            if (_objs== null)
            {
                _objs= new List<Obj>();
            }
            if (_objs.Count < 1)
            {
                _objs.Add(new Obj());
            }
            return _objs;
        }
        set { _objs= value; }
    } 
Run Code Online (Sandbox Code Playgroud)

为什么不可能?让我们在Java中做同样的事情:

    private List<Obj> objs;
    public List<Obj> getListObjs()
    {
        ...
        // Recursion
        return getListObjs();
    }
Run Code Online (Sandbox Code Playgroud)