代码之家  ›  专栏  ›  技术社区  ›  FutureCake

属性私有集崩溃Unity

  •  1
  • FutureCake  · 技术社区  · 7 年前

    我有一个自定义类,它从Web上获取一些数据。
    当我得到这个数据时,我想将它设置为一个属性的值,但是当我这样做时,这个统一性崩溃了。注释行在没有该行的情况下生成崩溃,一切正常。请参阅下面的代码:

    using System;
    using System.Collections;
    using UnityEngine;
    using UnityEngine.Networking;
    
    public class GetDB
    {
        private readonly Main m;
        private readonly string Url;
    
        public string DBData { 
            get
            {
                if(DBData == null)
                    return null;
                else
                    return DBData;
            } 
            private set
            {
                DBData = value;
            } 
        }
    
        public GetDB(Main m, string url)
        {
            this.m = m;
            this.Url = url;
        }
    
        public void GetServerData(){
            m.StartCoroutine(GetText(Url, (result) =>{
                this.DBData = result; //THIS LINE CRASHES UNITY
                Debug.Log(result);
            }));
        }
    
        IEnumerator GetText(string url, Action<string> result) {
            UnityWebRequest www = UnityWebRequest.Get(url);
            yield return www.SendWebRequest();
    
            if(www.isNetworkError || www.isHttpError) {
                Debug.Log(www.error);
            }
            else {
                if (result != null)
                    result(www.downloadHandler.text);
            }
        }
    }
    

    我该怎么解决这个问题?这里到底发生了什么?

    如果有任何不清楚的地方,请告诉我,以便我可以澄清。

    3 回复  |  直到 7 年前
        1
  •  2
  •   Kwinten    7 年前

    private string _dbData;
    public string DBData 
    { 
        get
        {
            return _dbData;
        } 
        private set
        {
            _dbData = value;
        } 
    }
    

        2
  •  4
  •   Alessandro D'Andria    7 年前

    string _dbData;
    
    public string DBData
    {
        get
        {
            if(_dbData == null)
                return null;
            else
                return _dbData;
        }
        private set
        {
            _dbData= value;
        }
    }
    

    public string GetDBData()
    {
        if(_dbData == null)
            return null;
        else
            return _dbData;
    }
    
    public void SetDBData(string value)
    {
        _dbData = value;
    }
    

    public void SetDBData(string value)
    {
        // you will never get out of here
        SetDBData(value);
    }
    
        3
  •  1
  •   Cid Gordon    7 年前

    get
    {
        if(DBData == null)
            return null;
        else
            return DBData;
    } 
    

    get
    {
        return DBData; //if DBData is null, it will return null
    }
    

    public string DBData 
    { 
        get;
        private set;
    }